Com uma expressão regular estendida:
grep -E '^([^/]*/[^/]*){1,2}$' input
que resulta nestas correspondências:
/a/b
/a
/b/c
/b
/c/d
/c
A sintaxe regex diz:
-
^
- ancorado ao começo da linha -
( ... )
- agrupa os seguintes bits juntos -
[^/]*
- qualquer caractere não-forward-slash, zero ou mais deles -
/
- uma barra invertida -
[^/]*
- qualquer caractere não-forward-slash, zero ou mais deles -
{1,2}
- um ou dois desses grupos -
$
- ancorado ao final da linha