Comment «rechercher et remplacer» de nombreux fichiers?

11

J'utilise la grepcommande pour rechercher une chaîne dans de nombreux fichiers. Existe-t-il quelque chose de similaire à «rechercher et remplacer»?

Tom Brito
la source

Réponses:

19

Vous recherchez la sedcommande. Par exemple, pour remplacer "chien" par "chat" dans tous les fichiers texte du répertoire courant:

sed -i 's/dog/cat/' *.txt
Jjed
la source
1
Simple et sympa.
Luis Alvarado
1

sed me vient à l'esprit. Exemple:

sed s/cat/dog/ <input >output

Cela recherche le chat dans une ligne et met le chien à sa place dans l'entrée du fichier et écrit dans la sortie du fichier.

Kerkdyk
la source
1

sedest le bon outil; mais, comme alternative, vous pouvez même utiliser des excommandes dans vim:

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

<files>est la liste des fichiers ou des modèles dans lesquels vous souhaitez effectuer la substitution.

jcollado
la source
note argdo n'est pas POSIX pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html
Steven Penny
0

Vous pouvez utiliser Vim en mode Ex:

for b in *.txt
do
  ex -sc '%s/OLD/NEW/g|x' "$b"
done
  1. % sélectionner toutes les lignes

  2. s remplacer

  3. g remplacer toutes les instances de chaque ligne

  4. x sauver et fermer

Steven Penny
la source