Sto imparando sed. Tutto sembrava andare bene fino a quando non ho incontrato la N (multi-linea successiva). Ho creato questo file (guide.txt) per scopi di pratica / comprensione / contesto. Ecco il contenuto di detto file ...
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
Quindi il mio obiettivo è sostituire TUTTE le istanze di "Amministratore di rete" con "Utente di sistema". Poiché la prima istanza di "Amministratore di rete" è separata da una nuova riga (\ n) ho bisogno dell'operatore successivo multilinea (N) per aggiungere la riga che inizia con "Amministratore" con la riga precedente che termina con "Rete \ n" . Nessun problema. Ma voglio anche catturare tutte le altre istanze a linea singola "Network Administrator".
Dalla mia ricerca, ho imparato che avrò bisogno di due comandi di sostituzione; uno per la stringa separata newline e uno per gli altri. Inoltre, sta succedendo un po 'di jive a causa dell'ultima riga contenente la partita di sostituzione e la successiva multi-linea. Quindi ho creato questo ...
$ sed '
> s/Network Administrator/System User/
> N
> s/Network\nAdministrator/System\nUser/
> ' guide.txt
Questo restituisce questi risultati ...
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
Ho pensato che la sostituzione a riga singola avrebbe catturato tutte le istanze "normali" di "Amministratore di rete" e l'avrebbe scambiato con "Utente di sistema", mentre l'istruzione multilinea avrebbe fatto la sua magia sull'istanza separata da nuova riga, ma mentre tu posso vederlo restituito, ciò che considero, risultati inaspettati.
Dopo aver giocherellato, sono atterrato su questo ...
$ sed '
> s/Network Administrator/System User/
> N
> s/Network\nAdministrator/System\nUser/
> s/Network Administrator/System User/
> ' guide.txt
E voilà, ottengo l'output desiderato di ...
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
Perché questo funziona e l'originale sed script no? Voglio davvero capirlo.
Grazie in anticipo per qualsiasi aiuto.