Ersetzen Sie alle Vorkommen eines Begriffs in den in einem Ordner enthaltenen Dateien

Ersetzen Sie alle Vorkommen eines Begriffs in den in einem Ordner enthaltenen Dateien

In einem Ordner auf meinem System habe ich ein C++Projekt, das ich zu kompilieren versuche.

Dabei kommen einige C++Idiome zum Einsatz, die von meiner Compilerversion nicht unterstützt werden. Insbesondere wird im Code oft der Datenwert verwendet 'nullptr'.

nullptrIch möchte alle Vorkommen von durch ersetzen NULL.

VIMDies kann ich mit dem folgenden Befehl tun :

:%s/nullptr/NULL/g 

Wie kann ich dies auf einmal für alle Dateien in einem Verzeichnis tun, ohne jede Datei zu öffnen und den Befehl auszuführen?

Antwort1

for file in /path/to/dir/*; do
  sed -i s/nullptr/NULL/g "$file"
done

Unterverzeichnisse sind hiervon allerdings nicht betroffen.

Bearbeiten 1

Die schnellere Lösung (mit GNU):

find /path/to/dir -type f -print0 | xargs -0 sed -i s/nullptr/NULL/g

Dies würde auch Unterverzeichnisse (und Dotfiles) betreffen. Fügen Sie es hinzu, -maxdepth 1wenn dies nicht gewünscht ist.

Antwort2

Hierfür gibt es zwei Möglichkeiten:

vim

Sie können vim von der Befehlszeile aus wie folgt verwenden:

$ vim -c "%s/nullptr/NULL/g|wq" foo.txt

In eine For-Schleife einbinden:

$ for i in *; do vim -c "%s/nullptr/NULL/g|wq" -- "$i"; done

Perl

$ perl -p -i -e 's/nullptr/NULL/g' foo.txt

In eine For-Schleife einbinden:

$ for i in *; do perl -p -i -e 's/nullptr/NULL/g' -- "$i"; done

Oder einfach:

$ perl -p -i -e 's/nullptr/NULL/g' -- *

Antwort3

Mit GNU-Tools:

grep -rlZ nullptr /path/to/dir |
  xargs -r0 sed -i s/nullptr/NULL/g

Um zu vermeiden, dass jede Datei neu geschrieben werden muss.

Wie immer bei sed -i, denken Sie daran, dass Links (hart und weich) beschädigt werden können, der Besitz und die Berechtigungen von Dateien geändert werden können und die Spärlichkeit und möglicherweise andere ungewöhnliche Attribute von Dateien verändert werden können. Beachten Sie auch, dass grepfrühere GNU-Versionen 2.12beim Absteigen im Verzeichnisbaum mit symbolischen Links folgen -r.

verwandte Informationen