Você deseja canalizar encontrar em xargs , que lerá corretamente os resultados de find :
find . -type f -print0 | xargs grep "hello"
Veja a página do manual xargs (1) para mais informações.
Eu preciso procurar o diretório atual e seus subdiretórios para arquivos regulares contendo as palavras: "olá"
Por que isso não funciona para mim:
find . -type f | grep "hello"
Com o comando que você está propondo, você está procurando por qualquer nome de arquivo com a string hello em RATHER que a string hello no conteúdo do arquivo. Use a construção abaixo:
find . -type f -exec grep -n hello /dev/null {} +
Assim, você pode usar a opção -regex do comando find .
find . -type f -regex ".*/.*hello.*"
.*hello.* - corresponde aos nomes que contenham a palavra "olá".
.*/ é necessário porque o comando find retorna o caminho completo.