Ich muss eine Zeichenfolge in einer Menge von Dateien in einem Ordner ersetzen, mit nur ssh
Zugang zum Server. Wie kann ich das tun?
Antworten
Zu viele Anzeigen?cd /path/to/your/folder
sed -i 's/foo/bar/g' *
Vorkommnisse von "foo" werden durch "bar" ersetzt.
Auf BSD-Systemen wie macOS müssen Sie eine Backup-Erweiterung wie -i '.bak'
andernfalls "riskieren Sie die Beschädigung oder einen unvollständigen Inhalt", wie es in der Manpage heißt.
cd /path/to/your/folder
sed -i '.bak' 's/foo/bar/g' *
Die Antwort von @kev ist gut, betrifft aber nur Dateien im unmittelbaren Verzeichnis. Das folgende Beispiel verwendet grep, um Dateien rekursiv zu finden. Das funktioniert bei mir jedes Mal.
grep -rli 'old-word' * | xargs -i@ sed -i 's/old-word/new-word/g' @
Aufschlüsselung der Befehle
grep -r : --Rekursiv rekursiv alle Dateien in jedem Verzeichnis lesen.
grep -l : --print-with-matches gibt den Namen jeder Datei aus, die eine Übereinstimmung aufweist, anstatt die übereinstimmenden Zeilen zu drucken.
grep -i : --ignore-case .
xargs STDIN in Argumente umwandeln, wie folgt répondre .
xargs -i@ ~Befehl enthält @~ : ein Platzhalter für das Argument, das an einer bestimmten Stelle im Text verwendet werden soll ~Befehl~ Das @-Zeichen ist ein Platzhalter, der durch eine beliebige Zeichenfolge ersetzt werden kann.
sed -i : Dateien an Ort und Stelle bearbeiten, ohne Backups.
sed s/regexp/Ersatz/ : Abgleich von Ersatzzeichenfolgen regexp con Ersatz .
sed s/regexp/Ersatz/ g : weltweit machen Sie die Ersetzung für jede Übereinstimmung und nicht nur für die erste Übereinstimmung.
Hierzu gibt es bereits einige Standardantworten. Im Allgemeinen können Sie verwenden finden. um die Dateien rekursiv aufzulisten und dann die Operationen mit sed o perl .
rpl
Für die meisten schnellen Anwendungen ist der Befehl rpl ist viel leichter zu merken.
Ersetzen Sie foo
con bar
für alle .txt
Dateien:
rpl -v foo bar '*.txt'
Simulieren Sie das Ersetzen der Regex foo.*
con bar
in allen .txt
Dateien rekursiv:
rpl --dry-run 'foo.*' bar '**/*.txt'
Sie müssen es wahrscheinlich installieren ( apt-get install rpl
oder ähnlich).
Repräsentieren
Für anspruchsvollere Aufgaben, die reguläre Ausdrücke und Rücksubstitution oder Dateiumbenennungen sowie Suchen und Ersetzen beinhalten, ist das allgemeinste und leistungsfähigste Tool, das ich kenne, Repräsentieren ein kleines Python-Skript, das ich vor einer Weile für einige schwierigere Umbenennungs- und Refactoring-Aufgaben geschrieben habe. Die Gründe, warum Sie es bevorzugen könnten, sind:
- Unterstützt das Umbenennen von Dateien sowie das Suchen und Ersetzen von Dateiinhalten.
- Sehen Sie sich die Änderungen an, bevor Sie das Suchen und Ersetzen durchführen.
- Unterstützung von regulären Ausdrücken mit Rückwärtssubstitution, ganzen Wörtern, Groß-/Kleinschreibung nicht berücksichtigend und Groß-/Kleinschreibung erhaltend (replace foo -> bar, Foo -> Bar, FOO -> BAR).
- Funktioniert mit mehreren Ersetzungen, einschließlich Vertauschungen (foo -> bar und bar -> foo) oder Mengen von nicht eindeutigen Ersetzungen (foo -> bar, f -> x).
Zur Verwendung, pip install repren
. Prüfen Sie die README für Beispiele.
- See previous answers
- Weitere Antworten anzeigen
1 Stimmen
Wenn Sie es vorziehen, Notepad++ anstelle der Befehlszeile zu verwenden, fand ich dies sehr hilfreich: superuser.com/a/1003801/74576