GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rekursives Suchen und Ersetzen in Textdateien auf Mac und Linux

Für den Mac wäre ein ähnlicherer Ansatz dieser:

find . -name '*.txt' -print0 | xargs -0 sed -i "" "s/form/forms/g"

Als alternative Lösung verwende ich diese auf Mac OSX 10.7.5

grep -ilr 'old-word' * | xargs [email protected] sed -i '' 's/old-word/new-word/g' @

Dank geht an:Antwort von Todd Cesere


OS X verwendet eine Mischung aus BSD- und GNU-Tools, also überprüfen Sie am besten immer die Dokumentation (obwohl ich es hatte, dass less nicht einmal der OS X-Manpage entspricht):

https://web.archive.org/web/20170808213955/https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sed.1.html

sed nimmt das Argument nach -i als Erweiterung für Backups. Geben Sie eine leere Zeichenfolge an (-i '' ) für keine Sicherungen.

Folgendes sollte reichen:

find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +

Die -type f ist nur gute Praxis; sed wird sich beschweren, wenn Sie ihm ein Verzeichnis oder so geben.

-exec wird gegenüber xargs bevorzugt; Sie brauchen sich nicht um -print0 zu kümmern oder so.

Die {} + am Ende bedeutet, dass find fügt alle Ergebnisse als Argumente an eine Instanz des aufgerufenen Befehls an, anstatt ihn für jedes Ergebnis erneut auszuführen. (Eine Ausnahme ist, wenn die vom Betriebssystem zugelassene maximale Anzahl von Befehlszeilenargumenten überschritten wird; in diesem Fall find wird mehr als eine Instanz ausführen.)

Wenn Sie eine Fehlermeldung wie „ungültige Bytefolge“ erhalten, kann es hilfreich sein, das Standardgebietsschema zu erzwingen, indem Sie LC_ALL=C hinzufügen am Anfang des Befehls, etwa so:

LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +


Linux
  1. Verwenden von sed zum Suchen und Ersetzen von Textdateien in Linux

  2. Testen Sie das rekursive Suchen und Ersetzen von Sed vor dem Ausführen?

  3. Verwenden Sie Find and Locate, um unter Linux nach Dateien zu suchen

  4. Linux Dateien und Verzeichnisse löschen

  5. Befehlszeile:Suchen und Ersetzen in allen Dateinamen, die mit grep übereinstimmen

Wie man Textdateien unter Linux vergleicht und zusammenführt

Wie man Textdateien unter Linux vergleicht und zusammenführt (Teil 2)

So finden Sie Dateien, die eine bestimmte Textzeichenfolge in Linux enthalten

Mit NitroShare können Sie Dateien ganz einfach zwischen Linux, Windows und Mac austauschen

Linux-Suche nach Zeichenfolgen in Ordnern und Dateien mit ack

MySQL Suchen und Ersetzen