Como "pesquisar e substituir" muitos arquivos?

11

Eu uso o grepcomando para procurar uma string em muitos arquivos. Existe algo semelhante a "pesquisar e substituir"?

Tom Brito
fonte

Respostas:

19

Você está procurando o sedcomando Por exemplo, para substituir o "cachorro" por "gato" em todos os arquivos de texto no diretório atual:

sed -i 's/dog/cat/' *.txt
Jjed
fonte
1
Simples e agradável.
18743 Luis Alvarado
1

sed vem à mente. Exemplo:

sed s/cat/dog/ <input >output

Ele procura gato em uma linha e coloca o cão em seu lugar na entrada do arquivo e grava na saída do arquivo.

Kerkdyk
fonte
1

sedé a ferramenta certa; mas, como alternativa, você pode até usar excomandos em vim:

vim -c 'args <files> | argdo %s/cat/dog/g | x'

Onde <files>está a lista de arquivos ou padrões nos quais você deseja fazer a substituição.

jcollado
fonte
nota argdo não é POSIX pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html
Steven Penny
0

Você pode usar o Vim no modo Ex:

for b in *.txt
do
  ex -sc '%s/OLD/NEW/g|x' "$b"
done
  1. % selecione todas as linhas

  2. s substituto

  3. g substitua todas as instâncias em cada linha

  4. x salvar e fechar

Steven Penny
fonte