localizar e substituir em múltiplos arquivos na linha de comando
-
19-09-2019 - |
Pergunta
Como faço para localizar e substituir uma corda na linha de comando em múltiplos arquivos em unix?
Solução
existem muitas maneiras .Mas uma das respostas seria:
find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'
Outras dicas
Como a solução Zombie (e mais rápido eu suponho), mas com sed (padrão em muitas distros e OSX) em vez de Perl:
find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'
Isso irá substituir todos os foo ocorrências em seus arquivos Python abaixo do diretório atual com bar e criar um backup para cada arquivo com o .py.bak extensão.
E para remover de .bak arquivos:
find . -name "*.bak" -delete
Eu sempre fiz isso com roteiros ed ou ex roteiros .
for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof
O ex comando é apenas o:. Modo de linha de vi
Usando find e sed com nome ou diretórios com o uso do espaço o seguinte:
find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'
com o escudo recente bash, e supondo que você não precisa atravessar diretórios
for file in *.txt
do
while read -r line
do
echo ${line//find/replace} > temp
done <"file"
mv temp "$file"
done