Text nach dem ersten Buchstaben des Musters einfügen

Text nach dem ersten Buchstaben des Musters einfügen

Wie kann ich /foo/nach und nur nach der öffnenden Klammer einfügen?

(bar)

soll werden

(/foo/bar)

während (/baz/bar)solltenichtwerden(/baz/foo/bar)

Antwort1

In diesem einfachen Fall könnten Sie versuchen

sed 's,(bar,(/foo/bar,'

Antwort2

Ein komplizierter Weg, vorausgesetzt, Sie möchten /foo/hinzufügenbeliebigMuster in Klammern:

$ echo '(bar)' | sed 's;(/*\([^(]*\);(/foo/\1;'
(/foo/bar)

$ echo '(/bar/baz)' | sed 's;(/*\([^(]*\);(/foo/\1;'
(/foo/bar/baz)

Der Befehl lautet:

Wählen Sie den Inhalt zwischen den Klammern aus und erfassen Sie ihn (könnte mit einem Schrägstrich beginnen /) und ersetzen Sie (oder (/durch /foo/und das erfasste Muster.

Antwort3

Verwendung von awk:

awk '/\(bar/ {sub(/bar/, "/foo/bar"); }1' input

Mit sed:

sed -E 's%([(])(bar)%\1/foo/\2%' input

Dabei werden Rückreferenzen \1 für (und \2 für verwendet bar.

verwandte Informationen