Wie verwenden von sed-Befehl fügen Sie eine Zeichenfolge, bevor eine Muster-Zeichenfolge?
Möchte ich sed benutzen, zum ändern meiner Datei mit dem Namen "baz".
Wenn ich Suche ein Muster foo , foo, die nicht am Anfang oder Ende der Zeile, möchte ich anfügen, bar, bevor Sie die foo, wie kann ich mit sed?
Input file named baz:
blah_foo_blahblahblah
blah_foo_blahblahblah
blah_foo_blahblahblah
blah_foo_blahblahblah
Output file
blah_barfoo_blahblahblah
blah_barfoo_blahblahblah
blah_barfoo_blahblahblah
blah_barfoo_blahblahblah
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nur so etwas wie:
(die
g
am Ende bedeutet global, jedes vorkommen in jeder Zeile anstelle nur der ersten).Für eine beliebigen (anstatt fest) Muster wie
foo[0-9]
könnten Sie erfasste Gruppen wie folgt:Den Klammern erfassen der eigentliche text, der auf das Muster und die
\1
verwendet es in der substitution.Können Sie beliebig komplexe Muster mit diesem, einschließlich um sicherzustellen, Sie entsprechen nur ganze Wörter. Zum Beispiel, nur die änderung der Muster, wenn es sofort umgeben von einer Wort-Grenze:
In Bezug auf, wie man die capture-Gruppen arbeiten, können Sie Klammern verwenden, zum speichern der text, der einem Muster entspricht, für den späteren Gebrauch in den Austausch. Die erfassten Identifikatoren sind basierend auf dem
(
Zeichen Lesen von Links nach rechts, so dass die regex (ich habe aufgehört die\
escape-Zeichen und gepolsterten es ein bisschen für Klarheit):wenn auf den text angewendet
Pax Diablo
geben würde, Sie drei Gruppen:wie unten gezeigt:
sed 's/^foo/bar&/'
.man
Seiten sind nicht immer so umfassend. Du bist besser dran, bekommen einen Toter-Baum-Beschreibung (Buch) oder mitinfo sed
für mehr detail. Ich werde das update auch meine Antwort mit etwas mehr Fleisch.Nur Ersatz den Anfang der Zeile mit etwas anderem.
s
Betreiber hat seine Operanden, nachdem er angegeben.Ersetzen oder ändern alle "foo" außer am Anfang oder Ende der Zeile, ich würde vorschlagen, um Sie vorübergehend ersetzen am Anfang und Ende der Linie mit einem einzigartigen sentinel-Wert.
In
sed
es gibt keine Methode zu geben, "nicht hier". In Perl regex und Derivate (d.h. Sprachen, die ausgeliehen von Perl-regex, die nicht unbedingt Sprachen abgeleitet von Perl) Sie haben verschiedene negative Behauptungen so etwas wie