Pesquisa e substituição global de linha de comando do Linux

Estou tentando pesquisar e substituir uma string em todos os arquivos correspondentes ao grep em uma máquina linux. Eu tenho algumas partes do que quero fazer, mas não tenho certeza da melhor forma de juntá-las.

grep -n 'foo' * vai me dar saída no formulário:

[filename]:[line number]:[text]

Para cada arquivo retornado pelo grep, gostaria de substituir "foo" por "bar" e escrever o resultado novamente no arquivo. Existe uma boa maneira de fazer isso? Talvez um gasoduto chique?

questionAnswers(8)

yourAnswerToTheQuestion