Pergunta

Como faço para localizar e substituir uma corda na linha de comando em múltiplos arquivos em unix?

Foi útil?

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 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top