O padrão de regex (?<=#).* é um padrão de look-behind positivo de largura zero que requer que o grep suportado pelo PCRE (Perl Compatible Regular Expression) seja implementado. Se a sua opção grep suporta -P , então você pode fazê-lo.
Vendo o padrão, acho que você também precisa da opção -o para obter apenas a parte correspondente, pois (?<=#) garante que haja um # antes da parte desejada .* .
Então você pode fazer recursivo grep ( -r ):
grep -rPo '(?<=#).*' /directory