Wie kann man viele Dateien suchen und ersetzen?

11

Ich benutze den grepBefehl, um in vielen Dateien nach einer Zeichenfolge zu suchen. Gibt es etwas Ähnliches wie "Suchen und Ersetzen"?

Tom Brito
quelle

Antworten:

19

Sie suchen nach dem sedBefehl. So ersetzen Sie beispielsweise den "Hund" in allen Textdateien im aktuellen Verzeichnis durch "Katze":

sed -i 's/dog/cat/' *.txt
Jjed
quelle
1
Einfach und nett.
Luis Alvarado
1

sed kommt mir in den Sinn. Beispiel:

sed s/cat/dog/ <input >output

Dies sucht nach Katze in einer Zeile und setzt Hund an seinen Platz in der Dateieingabe und schreibt in die Dateiausgabe.

Kerkdyk
quelle
1

sedist das richtige Werkzeug; Alternativ können Sie auch exBefehle verwenden in vim:

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

Wo <files>ist die Liste der Dateien oder Muster, in denen Sie die Ersetzung vornehmen möchten.

jcollado
quelle
Hinweis argdo ist nicht POSIX pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html
Steven Penny
0

Sie können Vim im Ex-Modus verwenden:

for b in *.txt
do
  ex -sc '%s/OLD/NEW/g|x' "$b"
done
  1. % Wählen Sie alle Zeilen aus

  2. s Ersatz

  3. g Ersetzen Sie alle Instanzen in jeder Zeile

  4. x speichern und schließen

Steven Penny
quelle