alias para substituir um texto no arquivo

2

aqui é uma situação prática.Eu enfrento alguns dos meus arquivos, onde há uma string comum nesses arquivos.Eu costumo abrir o vi e fazer alguma coisa como

:%s/text/replacement/g

e eu tenho que fazer isso em muitos arquivos muitas e muitas vezes. Existe alguma maneira fácil de fazer isso ou algum tipo de apelido que eu possa criar para o mesmo?

    
por Registered User 10.03.2011 / 09:43

3 respostas

4

Você pode usar o find para encontrar os arquivos de destino e enviá-los para o sed:

find | xargs sed -i 's/foo/bar/g'

Substitua apenas arquivos .txt:

find . -name "*.txt" -print | xargs sed -i 's/foo/bar/g'

(de esta postagem no blog )

    
por 10.03.2011 / 09:48
4

Ah sim, hora de um perlineriner. Que tal isso?

perl -pi -e 's/old text/new text/' file

ou talvez você queira alterar todos os arquivos * .txt no diretório atual? Nesse caso, que tal combiná-lo com o paralelo GNU :

parallel perl -i.bak -pe 's/foo/bar/' ::: *.txt

Com o paralelo, o ::: significa que usam o eveything após isso como arquivos de entrada .

ou, para alterar all os arquivos txt no diretório atual e abaixo :

find . -name \*txt -print0 | parallel -q -0 perl -i.bak -pe 's/old text/new text/'

Observe que -i.bak salva uma cópia de backup de todos os arquivos que você altera, no caso de cometer um erro. Você pode deixar isso de lado se estiver se sentindo perigoso.

De qualquer forma, obviamente, a resposta sed é a padrão, mas existem algumas formas alternativas divertidas de fazer isso também. Além disso, se você tiver muitos arquivos, o gnu parallel será significativamente mais rápido, já que executa várias cópias em paralelo (como seria de esperar, dado o nome).

    
por 10.03.2011 / 10:09
1

Confira sed, algo assim:

sed -i 's/text/replacement/g' file
    
por 10.03.2011 / 09:50