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