Ja, es gibt verschiedene Möglichkeiten, dies zu tun. Sie können auch awk, perloder verwenden bash, um diese Aktivitäten auszuführen. Im Allgemeinen sedist 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 -iSchalter hinzu.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Denn awkes 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 awkdem Inhalt der Datei abgeglichen, die in die Sub-Shells STDIN eingelesen wurde. Dieser Inhalt wird dann von verarbeitet awkund 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.