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
.