Use isto:
grep -rn "$\('\|\"\)" /path/to/directory
Seu problema é na verdade duplo:
-
Da perspectiva de
grep, Você está usando as sintaxes Regex estendidas, ou seja,(,|,)sem escapar delas (para tratá-las como especiais) dentro do padrão Básico de Regex. Para superar isso, escape a todos para tratá-los como especiais ou use a opção-Edegrep. -
Outro problema causado pelo problema não escapando é que
$()é o padrão de substituição do comandobash, pois você não escapou dos caracteres relevantesbashestava tratando o padrão$()como substituição de comando . Observe que o\$()torna o comando\plus substituição de comando como primeiro\fará o segundo\literal e o restante padrão de substituição de comando será deixado como está.
Observe também que -i é desnecessário aqui, pois não estamos pesquisando caracteres alfabéticos. Você pode estar interessado em imprimir os nomes dos arquivos:
grep -Hrn "$\('\|\"\)" /path/to/directory
Outra coisa é que você pode escapar sem $ (indica o fim da linha) nesse caso, porque existem caracteres para corresponder depois de $ , como resultado grep irá tratar literalmente:
grep -Hrn "$\('\|\"\)" /path/to/directory