Use uma combinação de find(1)
e sed(1)
:
# Find all files under the directory hierarchy rooted at 'root', and replace
# all instances of the regular expression 'pattern' with 'replacement' in all
# of those files:
find root -type f -exec sed -i~ 's/pattern/replacement/g' '{}' '+'
Se você encontrar limitações de comprimento de linha de comando, substitua o '+'
no final por ';'
. Isso fará com que ele seja executado mais devagar (já que foi para bifurcar um novo processo para cada arquivo), mas não haverá perigo de uma linha de comando muito longa para sed
.
Você também pode substituir apenas alguns arquivos adicionando filtros apropriados a find
(por exemplo, -name *.txt
para substituir somente arquivos .txt).