Ich lerne sed. Alles schien gut zu laufen, bis ich auf das N stieß (als nächstes mehrzeilig). Ich habe diese Datei (guide.txt) zum Üben / Verstehen / Kontext erstellt. Hier ist der Inhalt dieser Datei ...
This guide is meant to walk you through a day as a Network
Administrator. By the end, hopefully you will be better
equipped to perform your duties as a Network Administrator
and maybe even enjoy being a Network Administrator that much more.
Network Administrator
Network Administrator
I'm a Network Administrator
Mein Ziel ist es daher, ALLE Instanzen von "Netzwerkadministrator" durch "Systembenutzer" zu ersetzen. Da die erste Instanz von "Netzwerkadministrator" durch eine neue Zeile (\ n) getrennt ist, muss der mehrzeilige nächste Operator (N) die Zeile, die mit "Administrator" beginnt, an die vorherige Zeile anhängen, die mit "Netzwerk \ n" endet. . Kein Problem. Ich möchte aber auch alle anderen einzeiligen "Netzwerkadministrator" -Instanzen abfangen.
Durch meine Forschung habe ich gelernt, dass ich zwei Substitutionsbefehle benötige; eine für die durch Zeilenumbrüche getrennte Zeichenfolge und eine für die anderen. Außerdem passiert ein Jive aufgrund der letzten Zeile, die die Substitutionsübereinstimmung enthält, und der nächsten Zeile mit mehreren Zeilen. Also bastle ich das ...
$ sed '
> s/Network Administrator/System User/
> N
> s/Network\nAdministrator/System\nUser/
> ' guide.txt
Dies gibt diese Ergebnisse zurück ...
This guide is meant to walk you through a day as a System
User. By the end, hopefully you will be better
equipped to perform your duties as a System User
and maybe even enjoy being a Network Administrator that much more.
System User
Network Administrator
I'm a System User
Ich dachte, dass die einzeilige Ersetzung alle "normalen" Instanzen von "Network Administrator" abfangen und gegen "Systembenutzer" austauschen würde, während die mehrzeilige Anweisung ihre Magie auf die durch neue Zeilen getrennte Instanz ausüben würde, aber wie Sie Ich kann sehen, dass es zurückgegeben wird, was ich für unerwartete Ergebnisse halte.
Nach einigem Fummeln landete ich auf diesem ...
$ sed '
> s/Network Administrator/System User/
> N
> s/Network\nAdministrator/System\nUser/
> s/Network Administrator/System User/
> ' guide.txt
Und voilà, ich bekomme die gewünschte Ausgabe von ...
This guide is meant to walk you through a day as a System
User. By the end, hopefully you will be better
equipped to perform your duties as a System User
and maybe even enjoy being a System User that much more.
System User
System User
I'm a System User
Warum funktioniert das und das ursprüngliche sed-Skript nicht? Ich möchte das wirklich verstehen.
Vielen Dank im Voraus für jede Hilfe.