Ja, es gibt verschiedene Möglichkeiten, dies zu tun. Sie können auch awk
, perl
oder verwenden bash
, um diese Aktivitäten auszuführen. Im Allgemeinen sed
ist es jedoch wahrscheinlich das am besten geeignete Werkzeug für diese Art von Aufgaben.
Beispiele
Angenommen, ich habe diese Beispieldaten in einer Datei data.txt
:
foo bar 12,300.50
foo bar 2,300.50
abc xyz 1,22,300.50
awk
$ awk '{gsub("foo", "foofoofoo", $0); print}' data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Perl
$ perl -pe "s/foo/foofoofoo/g" data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Inline-Bearbeitung
Die obigen Beispiele können auch die Dateien direkt ändern. Das Perl-Beispiel ist trivial. Fügen Sie einfach den -i
Schalter hinzu.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Denn awk
es ist ein bisschen weniger direkt, aber genauso effektiv:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Diese Methode erstellt eine Sub-Shell mit den geschweiften Klammern "{...}", in die die Datei folgendermaßen umgeleitet wird:
$ { ... } < data.txt
Sobald die Datei in die Sub-Shell umgeleitet wurde, wird sie gelöscht und dann mit awk
dem Inhalt der Datei abgeglichen, die in die Sub-Shells STDIN eingelesen wurde. Dieser Inhalt wird dann von verarbeitet awk
und in den gleichen Dateinamen zurückgeschrieben, den wir gerade gelöscht haben, und ersetzt ihn effektiv.
$var=~s/a/b/g
,gsub(/a/,"b",var)
,var.gsub(/a/,'b')
,var.replace(/a/g,'b')
,preg_replace("/a/","b",$var)
,regsub -all a b $var
. Daneben können viele Tools und Sprachen auch Zeichenfolgen im Klartext ersetzen. Deine Frage ist also irgendwie weit gefasst.