Stream Editor - Sintassi di base

Questo capitolo introduce i comandi di base supportati da SED e la loro sintassi della riga di comando. SED può essere invocato nelle seguenti due forme:

sed [-n] [-e] 'command(s)' files 
sed [-n] -f scriptfile files

Il primo modulo permette di specificare i comandi in linea e sono racchiusi tra virgolette singole. Il secondo consente di specificare un file di script che contiene i comandi SED. Tuttavia, possiamo usare entrambe le forme insieme più volte. SED fornisce varie opzioni della riga di comando per controllarne il comportamento.

Vediamo come possiamo specificare più comandi SED. SED fornisce ildeletecomando per eliminare alcune righe. Eliminiamo la prima, la seconda e la quinta riga. Per il momento, ignora tutti i dettagli del comando di cancellazione. Discuteremo più avanti sul comando di cancellazione.

In primo luogo, visualizzare il contenuto del file utilizzando l'estensione cat comando.

[jerry]$ cat 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

Ora ordina a SED di rimuovere solo alcune linee. Qui, per eliminare tre righe, abbiamo specificato tre comandi separati con l'opzione -e.

[jerry]$ sed -e '1d' -e '2d' -e '5d' books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Inoltre, possiamo scrivere più comandi SED in un file di testo e fornire il file di testo come argomento a SED. SED può applicare ogni comando sul pattern buffer. Il seguente esempio illustra la seconda forma di SED.

Innanzitutto, crea un file di testo contenente i comandi SED. Per una facile comprensione, utilizziamo gli stessi comandi SED.

[jerry]$ echo -e "1d\n2d\n5d" > commands.txt 
[jerry]$ cat commands.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

1d 
2d 
5d

Ora istruisci il SED a leggere i comandi dal file di testo. Qui, otteniamo lo stesso risultato mostrato nell'esempio sopra.

[jerry]$ sed -f commands.txt books.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones,George R. R. Martin, 864

Opzioni standard

SED supporta le seguenti opzioni standard:

  • -n: stampa predefinita del buffer del motivo. Ad esempio, il seguente comando SED non mostra alcun output:

  • [jerry]$ sed -n '' quote.txt
  • -e : L'argomento successivo è un comando di modifica. Qui, le parentesi angolari implicano un parametro obbligatorio. Utilizzando questa opzione, possiamo specificare più comandi. Stampiamo ogni riga due volte:

  • [jerry]$ sed -e '' -e 'p' quote.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist 
 - Paulo Coelho, The Alchemist
  • -f : L'argomento successivo è un file contenente i comandi di modifica. Le parentesi angolari implicano un parametro obbligatorio. Nell'esempio seguente, specifichiamo il comando di stampa tramite file:

[jerry]$ echo "p" > commands 
[jerry]$ sed -n -f commands quote.txt

Eseguendo il codice sopra, ottieni il seguente risultato:

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist

Opzioni specifiche GNU

Esaminiamo rapidamente le opzioni SED specifiche per GNU. Notare che queste opzioni sono specifiche di GNU; e potrebbe non essere supportato da altre varianti del SED. Nelle sezioni successive, discuteremo queste opzioni in maggiore dettaglio.

  • -n, --quiet, --silent: come l'opzione standard -n.

  • -e script, --expression = script: come l'opzione standard -e.

  • -f file-script, --file = file-script: uguale all'opzione -f standard.

  • --follow-symlinks: se viene fornita questa opzione, il SED segue i collegamenti simbolici durante la modifica dei file sul posto.

  • -i [SUFFIX], --in-place [= SUFFIX]: questa opzione viene utilizzata per modificare il file sul posto. Se viene fornito il suffisso, esegue un backup del file originale, altrimenti sovrascrive il file originale.

  • -l N, --line-lenght = N: questa opzione imposta la lunghezza della riga per il comando l su N caratteri.

  • --posix: questa opzione disabilita tutte le estensioni GNU.

  • -r, --regexp-extended: questa opzione consente di utilizzare espressioni regolari estese piuttosto che espressioni regolari di base.

  • -u, --unbuffered: quando viene fornita questa opzione, il SED carica una quantità minima di dati dai file di input e svuota i buffer di output più spesso. È utile per modificare l'output di "tail -f" quando non si desidera attendere l'output.

  • -z, --null-data: per impostazione predefinita, il SED separa ogni riga da un carattere di nuova riga. Se viene fornita l'opzione NULL-data, separa le righe con caratteri NULL.