GNU/Linux >> Linux Esercitazione >  >> Linux

Tutorial Unix Sed:operazione su file multilinea con 6 esempi pratici

Come parte della nostra serie di tutorial UNIX sed in corso in precedenza, abbiamo trattato la stampa, l'eliminazione, la sostituzione, la scrittura di file, comandi di manipolazione dei file ecc., con la singola riga nello spazio del modello.

In questo articolo esaminiamo come eseguire l'operazione multilinea in Sed.

Vi ricordate la metodologia di lavoro Sed che abbiamo appreso nel nostro primo tutorial sed?. In quell'articolo abbiamo spiegato che Sed legge riga per riga, rimuove tutte le nuove righe finali, inserisce una riga in un buffer dello spazio del modello, elabora secondo i comandi forniti e stampa lo spazio del modello.

Nel caso, se desideri eliminare tutte le nuove righe in un file, non puoi utilizzare il metodo seguente. Perché la nuova riga è già stata rimossa e posizionata nello spazio del modello.

$ sed 's/\n//' filename or  $sed 's/\n/ENDOFLINE\n/' filename

Per situazioni come questa sed multilinea è appropriato. Sed fornisce il comando "N" per le operazioni multilinea.

Il comando N legge una riga successiva dall'input, Aggiungi la riga successiva allo spazio del modello. La riga successiva è separata dallo spazio del modello originale da un carattere di nuova riga.

Per prima cosa creiamo il file geekstuff.txt che verrà utilizzato in tutti gli esempi menzionati di seguito.

$ cat thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)


Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.
$

Nota: Ci sono due righe vuote consecutive nell'input sopra. (5a e 6a riga).

Sed Esempio 1. Unisci due linee consecutive

$ sed -e '{
N
s/\n/ @ /
}' thegeekstuff.txt

Linux Sysadmin @ Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc. @ Security (Firewall, Network, Online Security etc)
 @
Storage in Linux @ Website Design
Website Design @ Windows- Sysadmin, reboot etc.

Nell'esempio sopra,

  • Le parentesi graffe “{” e “}” utilizzate per raggruppare i comandi. Le parentesi graffe ei comandi sed devono trovarsi su righe separate.
  • Sed legge la prima riga e la inserisce nello spazio del modello, il comando N legge la riga successiva e aggiunge lo spazio del modello, ovvero la prima riga separata da nuova riga. Quindi ora lo spazio del modello avrà la prima riga\nseconda riga.
  • Prossima sostituzione di \n con spazio@spazio e stampa il contenuto dello spazio del modello come comportamento predefinito di sed. Quindi le righe consecutive sono unite e delimitate da " @ "

Sed Esempio 2. Numera ogni riga non vuota di un file

Come accennato nel nostro articolo precedente, =è un comando per ottenere il numero di riga di un file.

$ sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'
1 Linux Sysadmin
2 Databases - Oracle, mySQL etc.
3 Databases - Oracle, mySQL etc.
4 Security (Firewall, Network, Online Security etc)

7 Storage in Linux
8 Website Design
9 Website Design
10 Windows- Sysadmin, reboot etc.
  • Il primo comando sed stampa il numero di riga e stampa la riga originale in una riga successiva se non è uno spazio vuoto.( Eseguilo e vedi l'output del primo comando sed).
  • Il prossimo comando sed aggiunge solo un paio di righe.

Sed Esempio 3. Elimina due righe vuote consecutive dall'input

$ sed '/^$/{
N
/^\n$/d
}' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.

Se la riga è vuota, leggi e aggiunge la riga successiva, /^\n$/ rappresenta, due righe sono vuote,\n viene aggiunto dal comando N. Quindi elimina semplicemente lo spazio del modello e inizia il ciclo successivo usando il comando 'd'.

Sed Esempio 4. Elimina le ultime 2 righe di un file

Prima di visualizzare questo esempio devi conoscere due interessanti comandi sed.

  1. P – che stampa la prima riga di uno spazio pattern. (fino al primo \n).
  2. D – Elimina la prima riga dallo spazio del modello. Il controllo passa quindi all'inizio dello script.
$ sed 'N;$!P;$!D;$d' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
  1. Legge la prima riga e la posiziona nello spazio del modello.
  2. Il comando N legge la riga successiva e la aggiunge allo spazio del modello separato da una nuova riga. (Ora prima riga\nseconda riga)
  3. Se non raggiunge l'ultima riga ($), stampa la prima riga ed elimina la prima riga solo dallo spazio del modello. Quindi il ciclo ricomincia.
  4. In questo modo si unisce alla 2a\n3a riga, alla 3a\n4a riga e continua.
  5. Alla fine quando ha la 9a\n10a riga in uno spazio di pattern, raggiunge $ quindi cancella semplicemente lo spazio di pattern. ($!P e $!D non verranno stampati ed eliminati se è $).

Sed Esempio 5. Stampa le ultime 2 righe di un file

$ sed '$!N;$!D' thegeekstuff.txt
Website Design
Windows- Sysadmin, reboot etc.

Quanto sopra unisce ed elimina ogni riga finché le ultime due righe non sono presenti nello spazio del modello. Quando raggiunge $, stampa lo spazio del modello che avrà solo le ultime due righe.

Sed Esempio 6. Elimina righe duplicate e consecutive da un file

Il comando seguente controlla ogni riga unita alla riga successiva, controlla se entrambe sono uguali quindi non lo spazio del modello di stampa (!P), elimina semplicemente la prima riga dallo spazio del modello. Quindi solo una riga rimarrà nello spazio del modello.

$ sed '$!N; /^\(.*\)\n\1$/!P; D' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
Windows- Sysadmin, reboot etc.

Linux
  1. Esercitazione sui comandi Awk Linux/UNIX con esempi

  2. 17 Utile comando Tar con esempi pratici in Linux

  3. Comando Diff in Linux con esempi

  4. Tutorial Awk:Comprendi le variabili Awk con 3 esempi pratici

  5. Esercitazione sullo stato di uscita di Bash Shell con esempi pratici

Tutorial Unix Sed:esempi di sostituzione Sed avanzati

Tutorial Unix Sed:aggiungi, inserisci, sostituisci e conta righe di file

Tutorial Unix Sed:6 esempi per l'operazione di diramazione Sed

Bash Scripting Introduzione Tutorial con 5 esempi pratici

The Ultimate Tar Command Tutorial con 10 esempi pratici

Tutorial sulle funzioni di Bash Shell con 6 esempi pratici