Ich möchte den String __MARKER__
in finden someFile.txt
und einen String darüber platzieren (z. B. Hello World!
).
Wie würde ich das mit machen sed
?
sed -i -e 's/__MARKER__/Hello world\n__MARKER__/' someFile.txt
Nach dem Ausführen des obigen Snippets ist der Inhalt von jedoch someFile.txt
unten:
Hello worldn__MARKER__
Inhalt someFile.txt
vor Manipulation:
__MARKER__
Inhalt someFile.txt
nach Manipulation:
Hello World!
__MARKER__
s/…/…/
ist eine Substitution, die den ersten …
durch den zweiten ersetzt …
. Sie können eine neue Zeile in Ihrer Zeichenfolge verwenden, um Text über oder unter einem Zeilenumbruch einzufügen.
sed -i -e 's/__MARKER__/Hello world\
__MARKER__/' someFile.txt
Maskieren Sie die neue Zeile mit einem Backslash, sonst erhalten Sie "nicht maskierter Zeilenumbruch innerhalb des Ersatzmusters". Um eine neue Zeile im Terminal einzugeben, verwenden Sie ⌥↩︎.
Sie können &
die Übereinstimmung als Kurzschrift verwenden, sodass Sie sie bei der Ersetzung nicht erneut eingeben müssen.
sed -i -e 's/__MARKER__/Hello world\
&/' someFile.txt
someFile.txt
ist // __MARKER__
? Beachten Sie die //
. Muss ich ihm entkommen?// Hello world
gefolgt __MARKER__
. Ich bin mir nicht sicher, worauf Sie sich mit Escaping beziehen //
, die Substitution sucht lediglich nach der Markierungszeichenfolge und ersetzt sie durch die Substitution.Eine weitere Option ist die Einfügefunktionsed
von .
Eingang:
cat someFile.txt
Ausgang:
apple
orange
grape
pineapple
plum
_MARKER_
banana
Eingang:
sed '/_MARKER_/i\
Hello World!
' someFile.txt
Ausgang:
apple
orange
grape
pineapple
plum
Hello World!
_MARKER_
banana
Glen Jackman