Como “pesquisar e substituir” muitos arquivos?

Como “pesquisar e substituir” muitos arquivos?

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

Responder1

Você está procurando osedcomando. Por exemplo, para substituir “cachorro” por “gato” em todos os arquivos de texto no diretório atual:

sed -i 's/dog/cat/' *.txt

Responder2

sed vem à mente. Exemplo:

sed s/cat/dog/ <input >output

Isso procura cat em uma linha e coloca dog em seu lugar na entrada do arquivo e grava na saída do arquivo.

Responder3

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 deseja fazer a substituição.

Responder4

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. ssubstituto

  3. gsubstitua todas as instâncias em cada linha

  4. xsalvar e fechar

informação relacionada