So ersetzen Sie eine Zeichenfolge in mehreren Dateien mit grep und sed, wenn Sie das argument-i wird nicht unterstützt?
Habe ich versucht diesen Befehl,
grep '/static' dir/* | xargs sed -i 's/\/static//g'
aber die version von sed bin ich nicht unterstützen, das argument-i.
Ersetzen einer Zeichenfolge in einer Datei, um die Eingabe derselben Datei wie die Ausgabe, die ich in der Regel tun dies:
sed 's/\/static//g' filename.txt > new_filename.txt ; mv new_filename.txt filename.txt
InformationsquelleAutor davierc | 2012-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
OS X-version von
sed
unterstützt-i
, aber es erfordert ein argument zu sagen, welche Dateiendung zu verwenden, für die backup-Datei (oder""
für kein backup). BTW, Sie wollengrep -l
man nur die Dateinamen.InformationsquelleAutor Gordon Davisson
Perl:
In diesem begrenzten Szenario, Perl sehr ähnlich ist
sed
. Sie können die Konvertierung einfachsed
- Skripte, Perl mit ders2p
tool.InformationsquelleAutor Diego Torres Milano
Können Sie diese mithilfe einer Schleife:
Ich die
.$$
suffix ($$
ist die Prozess-id der aktuellen shell) zur Vermeidung von Kollisionen mit vorhandenen Dateinamen, und&&
eher als;
zu vermeiden, Stress in der input-Datei wenn diesed
Befehl aus irgendeinem Grund ausfällt. Ich habe auch-l
so grep Drucke Datei-Namen anstelle von übereinstimmenden Zeilen.Oder Sie können installieren Sie GNU sed (ich bin mir nicht sicher, wie genau zu tun, dass auf OSX).
grep
Befehl print file-Namen anstelle der Zeilen mit Treffern, wie$(grep --files-with-matches '/static' dir/*)
?Ganz rechts (ich kopierte den Befehl "grep" aus der Frage sollte geprüft mehr genau). Antwort aktualisiert.
Danke für den Tipp zur Verwendung .$$. Das klappt perfekt, und nach weiteren Lesen ich verstehe es völlig. Verdammt Schande, es ist keine Arbeit, wo ich verwenden kann, die einfach einen liner.
Nun, Sie können schreiben Sie es auf eine (sehr lange) Linie -- oder Sie können die Befehle in ein shell-Skript.
Ich wollte sagen, es ist ein gleichen ich kann nicht mit der one-liner, die ich oben beschrieben habe(die mit dem argument-i).
InformationsquelleAutor Keith Thompson