sed Anfänger: Ändern aller Vorkommen in einem Ordner
Ich brauche eine regex suchen und ersetzen über alle Dateien in einem Ordner (und dessen Unterordner). Was wäre die linux-shell-Befehl zu tun?
Zum Beispiel, ich möchte zu laufen, diese über alle Dateien und überschreiben Sie die alte Datei mit der neuen ersetzt text.
sed 's/old text/new text/g'
InformationsquelleAutor der Frage nickf | 2009-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Möglichkeit, es zu tun mit nur sed. Sie müssen zumindest die such-utility zusammen:
Dieser Befehl erstellt eine
.bak
- Datei für jede geänderte Datei.Hinweise:
-i
argument fürsed
Befehl ist eine GNU-Erweiterung, so dass, wenn Sie ausführen dieses Befehls mit der BSD -sed
müssen Sie die Umleitung der Ausgabe in eine neue Datei und benennen Sie Sie.find
- Dienstprogramm implementiert nicht die-exec
argument in den alten UNIX-Kisten, also, werden Sie brauchen, um eine| xargs
statt.InformationsquelleAutor der Antwort osantana
Bevorzuge ich
find | xargs cmd
überfind -exec
weil es leichter zu merken.Diesem Beispiel Global ersetzt "foo" mit "bar" in .txt-Dateien auf oder unter dem aktuellen Verzeichnis:
Den
-print0
und-0
- Optionen können weggelassen werden, wenn Sie die Dateinamen nicht enthalten funky Zeichen wie Leerzeichen.InformationsquelleAutor der Antwort Dennis
Für die Portabilität, die ich nicht verlassen sich auf die Funktionen der sed, die spezifisch für linux oder BSD. Stattdessen verwende ich die
overwrite
Skript von Kernighan und Pike ' s Buch auf die Unix-Programmierumgebung.Der Befehl ist dann
Und die
overwrite
Skript (die ich verwende alle über dem Platz) istDie Idee ist, dass es überschreibt eine Datei nur, wenn ein Befehl erfolgreich ausgeführt wurde. Nützlich in
find
und auch, wo Sie nicht verwenden möchtenweil die Schale schneidet, bevor Sie die Datei
sed
es Lesen kann.InformationsquelleAutor der Antwort Norman Ramsey
Könnte ich vorschlagen (nach dem sichern der Dateien):
InformationsquelleAutor der Antwort paxdiablo
Vielleicht möchten Sie versuchen meine Masse suchen/ersetzen von Perl-Skript. Hat einige Vorteile gegenüber angekettet-utility-Lösungen (wie nicht mit, um sich mit mehreren Ebenen des shell-Metazeichen interpretation).
InformationsquelleAutor der Antwort chaos
Falls die Namen der Dateien im Ordner hat einige regelmäßige Namen (wie file1, file2...), das ich bereits für den Zyklus.
InformationsquelleAutor der Antwort tereza