Stream Editor - Comandi di base

Questo capitolo descrive diversi utili comandi SED.

Elimina comando

SED fornisce vari comandi per manipolare il testo. Esploriamo prima ildeletecomando. Ecco come eseguire un comando di cancellazione:

[address1[,address2]]d

address1 e address2sono rispettivamente gli indirizzi iniziali e finali, che possono essere numeri di riga o stringhe di pattern. Entrambi questi indirizzi sono parametri opzionali.

Come suggerisce il nome, il comando di eliminazione viene utilizzato per eseguire l'operazione di eliminazione e poiché il SED opera in linea, possiamo dire che questo comando viene utilizzato per eliminare le righe. Notare che il comando cancella rimuove le righe solo dal buffer dei pattern; la riga non viene inviata al flusso di output e il file originale rimane invariato. L'esempio seguente illustra il punto.

[jerry]$ sed 'd' books.txt

Ma dov'è l'uscita? Se non viene fornito alcun indirizzo di linea, il SED opera su ogni linea per impostazione predefinita. Quindi, cancella tutte le righe dal buffer del pattern. Ecco perché il comando non stampa nulla sullo standard output.

Diamo istruzioni al SED di operare solo su determinate linee. L'esempio seguente rimuove solo la quarta riga.

[jerry]$ sed '4d' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Inoltre, SED accetta anche l'intervallo di indirizzi utilizzando la virgola (,). Possiamo istruire il SED a rimuovere le linee da N1 a N2. Ad esempio, il seguente esempio elimina tutte le righe da 2 a 4.

[jerry]$ sed '2, 4 d' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

L'intervallo di indirizzi di SED non è limitato solo ai numeri. Possiamo anche specificare modelli come indirizzo. L'esempio seguente rimuove tutti i libri dell'autore Paulo Coelho.

[jerry]$ sed '/Paulo Coelho/d' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Possiamo anche specificare un intervallo di indirizzi usando un pattern testuale. L'esempio seguente rimuove tutte le linee tra i modelliStorm e Fellowship.

[jerry]$ sed '/Storm/,/Fellowship/d' books.txt  
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Oltre a questo, possiamo anche usare gli operatori dollar ($), plus (+) e tilde (~) con SED.

Scrivi comando

Una delle operazioni importanti che eseguiamo su qualsiasi file è il backup, ovvero facciamo un'altra copia del file. SED fornisce ilwritecomando per memorizzare il contenuto del pattern buffer in un file. Di seguito è riportata la sintassi diwrite comando che è simile al delete comando.

[address1[,address2]]w file

Qui, address1 e address2sono rispettivamente l'indirizzo iniziale e quello finale, che possono essere numeri di riga o stringhe di pattern. Entrambi questi indirizzi sono parametri opzionali.

Nella sintassi sopra, w si riferisce al comando di scrittura e fileè il nome del file in cui si memorizzano i contenuti. Stai attento con il filefileparametro. Quando viene fornito un nome di file, il SED crea un file al volo se non è presente e lo sovrascrive se è già presente.

Facciamo una copia esatta del file usando SED. Nota che deve esserci esattamente uno spazio traw e file.

[jerry]$ sed -n 'w books.bak' books.txt

Abbiamo creato un altro file chiamato books.bak. Ora verifica che entrambi i file abbiano contenuto identico.

[jerry]$ diff books.txt books.bak  
[jerry]$ echo $?

Eseguendo il codice sopra, ottieni il seguente risultato:

0

Puoi presumere che il file cpcomando fa esattamente la stessa cosa. Sì! Ilcpcomando fa la stessa cosa, ma SED è un'utilità maturata. Permette di creare un file contenente solo alcune righe dal file sorgente. Memorizziamo solo le righe pari in un altro file.

[jerry]$ sed -n '2~2 w junk.txt' books.txt  
[jerry]$ cat junk.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

È inoltre possibile utilizzare gli operatori virgola (,), dollaro ($) e più (+) con il comando write.

Oltre a questo, SED supporta anche il pattern matching con il comando write. Supponi di voler memorizzare tutti i libri dei singoli autori in un file separato. Un modo noioso e lungo è farlo manualmente, e il modo più intelligente è usare SED.

[jerry]$ sed -n -e '/Martin/ w Martin.txt' -e '/Paulo/ w Paulo.txt' -e '/Tolkien/ w 
Tolkien.txt' books.txt

Nell'esempio precedente, confrontiamo ogni riga con un modello e memorizziamo la riga corrispondente in un file particolare. È molto semplice. Per specificare più comandi, abbiamo usato-einterruttore del comando SED. Ora vediamo cosa contiene ogni file:

[jerry]$ cat Martin.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
6) A Game of Thrones, George R. R. Martin, 864

Mostriamo il contenuto del file.

[jerry]$ cat Paulo.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288

Mostriamo il contenuto del file.

[jerry]$ cat Tolkien.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432

Eccellente! Abbiamo ottenuto il risultato atteso. SED è davvero un'utilità straordinaria.

Aggiungi comando

Una delle operazioni più utili di qualsiasi editor di testo è fornire la funzionalità di aggiunta. SED supporta questa operazione tramite il suo comando append. Di seguito è riportata la sintassi di append:

[address]a\ 
Append text

Aggiungiamo una nuova voce del libro dopo la riga numero 4. L'esempio seguente mostra come farlo

[jerry]$ sed '4 a 7) Adultry, Paulo Coelho, 234' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Nella sezione comandi, 4 implica il numero di riga, a è il comando append e la parte rimanente è il testo da aggiungere.

Inseriamo una riga di testo alla fine del file. Per fare questo, usa$come indirizzo. L'esempio seguente lo illustra:

[jerry]$ sed '$ a 7) Adultry, Paulo Coelho, 234' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864 
7) Adultry, Paulo Coelho, 234

Oltre al numero di riga, possiamo anche specificare un indirizzo usando un pattern testuale. Ad esempio, il seguente esempio aggiunge del testo dopo aver trovato la stringaThe Alchemist.

[jerry]$ sed '/The Alchemist/ a 7) Adultry, Paulo Coelho, 234' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 234 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Nota che se ci sono più modelli corrispondenti, il testo viene aggiunto dopo ogni corrispondenza. L'esempio seguente illustra questo scenario.

[jerry]$ sed '/The/ a 7) Adultry, Paulo Coelho, 234' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
7) Adultry, Paulo Coelho, 234 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 234 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
7) Adultry, Paulo Coelho, 234 
6) A Game of Thrones, George R. R. Martin, 864

Cambia comando

SED fornisce change o replacecomando rappresentato da c. Questo comando aiuta a sostituire una riga esistente con un nuovo testo. Quando viene fornito un intervallo di righe, tutte le righe vengono sostituite come un gruppo da una singola riga di testo. Di seguito è riportata la sintassi del comando di modifica:

[address1[,address2]]c\ 
Replace text

Sostituiamo la terza riga con un altro testo.

[jerry]$ sed '3 c 3) Adultry, Paulo Coelho, 324' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) Adultry, Paulo Coelho, 324 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

SED accetta anche modelli come indirizzo. Nell'esempio seguente, una riga viene sostituita quando la corrispondenza del modello ha esito positivo.

[jerry]$ sed '/The Alchemist/ c 3) Adultry, Paulo Coelho, 324' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) Adultry, Paulo Coelho, 324 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

SED consente anche la sostituzione di più linee con una sola linea. L'esempio seguente rimuove le righe dalla quarta alla sesta e le sostituisce con un nuovo testo.

[jerry]$ sed '4, 6 c 4) Adultry, Paulo Coelho, 324' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) Adultry, Paulo Coelho, 324

Inserisci comando

Il comando insert funziona allo stesso modo di append. L'unica differenza è che inserisce una linea prima di una posizione specifica. Di seguito è riportata la sintassi del comando di inserimento:

[address]i\ 
Insert text

Cerchiamo di capire il comando di inserimento con alcuni esempi. Il comando seguente inserisce una nuova voce prima della quarta riga.

[jerry]$ sed '4 i 7) Adultry, Paulo Coelho, 324' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 324 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Nell'esempio sopra, 4 è il numero della posizione, i implica il comando di inserimento e la parte rimanente è il testo da inserire.

Per inserire del testo all'inizio di un file, fornire l'indirizzo della riga come 1. Il comando seguente lo illustra:

[jerry]$ sed '1 i 7) Adultry, Paulo Coelho, 324' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

7) Adultry, Paulo Coelho, 324
1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Inoltre, possiamo inserire più righe. Il comando seguente inserisce due righe prima dell'ultima riga.

[jerry]$ sed '$ i 7) Adultry, Paulo Coelho, 324

Eseguendo il codice sopra, ottieni il seguente risultato:

8) Eleven Minutes, Paulo Coelho, 304' books.txt 
1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage,Paulo Coelho, 288 
7) Adultry, Paulo Coelho, 324 
8) Eleven Minutes, Paulo Coelho, 304 
6) A Game of Thrones, George R. R. Martin, 864

Notare che le voci da inserire vengono immesse su righe separate e delimitate dal carattere backslash (\).

Traduci comando

SED fornisce un comando per tradurre i caratteri ed è rappresentato come y. Trasforma i personaggi in base alla posizione. Di seguito è riportata la sintassi del comando translate:

[address1[,address2]]y/list-1/list-2/

Nota che la traduzione è basata sulla posizione del carattere da list 1 al personaggio nella stessa posizione in list 2ed entrambi gli elenchi devono essere elenchi di caratteri espliciti. Le espressioni regolari e le classi di caratteri non sono supportate. Inoltre, la dimensione dilist 1 e list 2 deve essere lo stesso.

L'esempio seguente converte i numeri arabi in numeri romani.

[jerry]$ echo "1 5 15 20" | sed 'y/151520/IVXVXX/'

Eseguendo il codice sopra, ottieni il seguente risultato:

I V IV XX

l comando

Riesci a distinguere tra parole separate da spazi e parole separate da caratteri di tabulazione solo guardandole? Certamente no. Ma SED può farlo per te. SED utilizza l'estensionelcomando per visualizzare i caratteri nascosti nel testo. Ad esempio, il carattere di tabulazione con\t e Fine linea con $personaggio. Di seguito è riportata la sintassi dil comando.

[address1[,address2]]l 
[address1[,address2]]l [len]

Creiamo un file con caratteri di tabulazione per dimostrazione. Per semplicità, useremo lo stesso file, semplicemente sostituendo gli spazi con le tabulazioni. Aspettare! Ma come farlo: aprendo il file in un editor di testo e sostituendo ogni spazio con una tabulazione? Certamente no! Possiamo utilizzare i comandi SED per questo.

[jerry]$ sed 's/ /\t/g' books.txt > junk.txt

Ora mostriamo i caratteri nascosti usando il l comando:

[jerry]$ sed -n 'l' junk.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1)\tA\tStorm\tof\tSwords,George\tR.\tR.\tMartin,1216$ 
2)\tThe\tTwo\tTowers,J.\tR.\tR.\tTolkien,352$ 
3)\tThe\tAlchemist,Paulo\tCoelho,197$ 
4)\tThe\tFellowship\tof\tthe\tRing,J.\tR.\tR.\tTolkien,432$ 
5)\tThe\tPilgrimage,Paulo\tCoelho,288$ 
6)\tA\tGame\tof\tThrones,George\tR.\tR.\tMartin\t,864$

Come altri comandi SED, accetta anche numeri di riga e modelli come indirizzo. Potete provarlo voi stessi.

Diamo uno sguardo più da vicino ad un'altra caratteristica interessante di SED. Possiamo indicare al SED di eseguire il ritorno a capo automatico dopo un certo numero di caratteri. L'esempio seguente esegue il wrapping delle righe dopo 25 caratteri.

[jerry]$ sed -n 'l 25' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords,Geo\ 
rge R. R. Martin,1216$ 
2) The Two Towers,J. R. \ 
R. Tolkien,352$ 
3) The Alchemist,Paulo C\ 
oelho,197$ 
4) The Fellowship of the\ 
 Ring,J. R. R. Tolkien,4\ 
32$ 
5) The Pilgrimage,Paulo \ 
Coelho,288$ 
6) A Game of Thrones,Geo\ 
rge R. R. Martin ,864$

Si noti che nell'esempio precedente, il limite di avvolgimento viene fornito dopo il comando l. In questo caso, sono 25 caratteri. Questa opzione è specifica per GNU e potrebbe non funzionare con altre varianti del SED.

Un limite di ritorno a capo pari a 0 significa che non interrompi mai la riga a meno che non vi sia un nuovo carattere di riga. Il seguente semplice comando lo illustra.

[jerry]$ sed -n 'l 0' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords,George R. R. Martin,1216$ 
2) The Two Towers,J. R. R. Tolkien,352$ 
3) The Alchemist,Paulo Coelho,197$ 
4) The Fellowship of the Ring,J. R. R. Tolkien,432$ 
5) The Pilgrimage,Paulo Coelho,288$ 
6) A Game of Thrones,George R. R. Martin,864$

Esci da comando

Il comando Quit indica al SED di uscire dal flusso di esecuzione corrente. È rappresentato dalqcomando. Di seguito è riportata la sintassi del comando quit:

[address]q 
[address]q [value]

Notare che il comando quit non accetta un intervallo di indirizzi, supporta solo un singolo indirizzo. Per impostazione predefinita, SED segue il flusso di lavoro di lettura, esecuzione e ripetizione; ma quando viene rilevato il comando quit, interrompe semplicemente l'esecuzione corrente.

Stampiamo le prime 3 righe del file.

[jerry]$ sed '3 q' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197

Oltre al numero di riga, possiamo anche utilizzare modelli testuali. Il comando seguente si chiude quando la corrispondenza del pattern ha successo.

[jerry]$ sed '/The Alchemist/ q' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197

Oltre a questo, SED può anche accettare un file valueche può essere utilizzato come stato di uscita. Il comando seguente mostra il suo stato di uscita come 100.

[jerry]$ sed '/The Alchemist/ q 100' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197

Ora verifichiamo lo stato di uscita.

[jerry]$ echo $?

Eseguendo il codice sopra, ottieni il seguente risultato:

100

Leggi il comando

Possiamo istruire il SED a leggere il contenuto di un file e visualizzarlo quando una specifica condizione corrisponde. Il comando è rappresentato dall'alfabetor. Di seguito è riportata la sintassi del comando di lettura.

[address]r file

Nota che deve esserci esattamente uno spazio tra il file r comando e il nome del file.

Cerchiamo di capirlo con un semplice esempio. Crea un file di esempio chiamatojunk.txt.

[jerry]$ echo "This is junk text." > junk.txt

Il comando seguente indica al SED di leggere il contenuto di junk.txt e inserirli dopo la terza riga.

[jerry]$ sed '3 r junk.txt' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Nell'esempio sopra, 3 implica l'indirizzo della riga, r è il nome del comando e junk.txtè il nome del file il cui contenuto deve essere visualizzato. Inoltre, GNU SED accetta anche un intervallo di indirizzi. Ad esempio, il seguente comando inserisce il contenuto dijunk.txt dopo la terza, quarta e quinta riga.

[jerry]$ sed '3, 5 r junk.txt' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
This is junk text. 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

Come altri comandi SED, anche il comando read accetta pattern come indirizzo. Ad esempio, il seguente comando inserisce il contenuto dijunk.txt quando la corrispondenza del pattern ha successo.

[jerry]$ sed '/Paulo/ r junk.txt' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

Esegui comando

Possiamo eseguire comandi esterni da SED utilizzando il executecomando. È rappresentato dae. Di seguito è riportata la sintassi del comando di esecuzione.

[address1[,address2]]e [command]

Illustriamo il comando di esecuzione con un semplice esempio. Il seguente comando SED esegue UNIXdate comando prima della terza riga.

[jerry]$ sed '3 e date' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
Sun Sep  7 18:04:49 IST 2014 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Come altri comandi, accetta anche modelli come indirizzo. Ad esempio, viene eseguito il seguente esempiodatecomando quando una corrispondenza di pattern ha successo. Notare che dopo ogni corrispondenza di pattern, prima viene eseguito il comando e poi vengono visualizzati i contenuti del buffer di pattern.

[jerry]$ sed '/Paulo/ e date' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
Sun Sep  7 18:06:04 IST 2014 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
Sun Sep  7 18:06:04 IST 2014 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Se osservi la sintassi di e comando con attenzione, lo noterai commandè opzionale. Quando non viene fornito alcun comando dopoe,tratta il contenuto del pattern buffer come un comando esterno. Per illustrare ciò, creiamo un file commands.txt con pochi semplici comandi.

[jerry]$ echo -e "date\ncal\nuname" > commands.txt 
[jerry]$ cat commands.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

date 
cal 
uname

I comandi dal file sono autoesplicativi. In assenza dicommand dopo e,SED esegue tutti questi comandi uno per uno. Il seguente semplice esempio lo illustra.

[jerry]$ sed 'e' commands.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

Sun Sep  7 18:14:20 IST 2014 
   September 2014      
Su Mo Tu We Th Fr Sa   
    1  2  3  4  5  6   
 7  8  9 10 11 12 13   
14 15 16 17 18 19 20   
21 22 23 24 25 26 27   
28 29 30               
                       
Linux

Come altri comandi SED, il comando execute accetta anche tutti gli intervalli di indirizzi validi.

Comandi vari

Per impostazione predefinita, SED opera su una singola linea, tuttavia può funzionare anche su più linee. I comandi su più righe sono contrassegnati da lettere maiuscole. Ad esempio, a differenza din comando, il Nil comando non cancella e stampa lo spazio del motivo. Invece, aggiunge una nuova riga (\ n) alla fine dello spazio del pattern corrente e aggiunge la riga successiva dal file di input allo spazio del pattern corrente e continua con il flusso standard del SED eseguendo il resto dei comandi SED. Di seguito è riportata la sintassi diN comando.

[address1[,address2]]N

Stampiamo un elenco separato da virgole dei titoli dei libri e dei rispettivi autori. Il seguente esempio lo illustra.

[jerry]$ sed 'N; s/\n/, /g' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

Cerchiamo di capire come funziona l'esempio sopra. IlNil comando legge la prima riga, ovvero A Storm of Swords nel buffer dei pattern e aggiunge \ n seguita dalla riga successiva. Lo spazio del modello ora contiene A Storm of Swords\nGeorge RR Martin. Nel passaggio successivo, sostituiremo la nuova riga con una virgola.

Piace p comando, abbiamo un file P comando per stampare la prima parte (fino al ritorno a capo incorporato) dello spazio del modello su più righe creato da Ncomando. Di seguito è riportata la sintassi diP comando che è simile al p comando.

[address1[,address2]]P

Nell'esempio precedente, abbiamo visto che il file NIl comando crea un elenco separato da una nuova riga di titoli di libri e dei loro autori. Stampiamo solo la prima parte, cioè solo i titoli del libro. Il comando seguente lo illustra.

[jerry]$ sed -n 'N;P' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

A Storm of Swords 
The Two Towers 
The Alchemist 
The Fellowship of the Ring 
The Pilgrimage 
A Game of Thrones

Si noti che in assenza di N, si comporta come il pcomando. Il seguente semplice comando illustra questo scenario.

[jerry]$ sed -n 'P' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones 
George R. R. Martin

Oltre a questo, SED fornisce anche un file vcomando che verifica la versione. Se la versione fornita è maggiore della versione SED installata, l'esecuzione del comando non riesce. Notare che questa opzione è specifica per GNU e potrebbe non funzionare con altre varianti di SED. Di seguito è riportata la sintassi div comando.

[address1[,address2]]v [version]

Per prima cosa, scopri la versione attuale di SED.

[jerry]$ sed --version

Eseguendo il codice sopra, ottieni il seguente risultato:

sed (GNU sed) 4.2.2

Nell'esempio seguente, la versione SED è maggiore della versione 4.2.2, quindi il comando SED interrompe la sua esecuzione.

[jerry]$ sed 'v 4.2.3' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

sed: -e expression #1, char 7: expected newer version of sed

Ma se la versione fornita è inferiore o uguale alla versione 4.2.2, il comando funziona come previsto.

[jerry]$ sed 'v 4.2.2' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones George R. R. Martin