Introduzione al sed Editor
Il termine sed sta per editor di streaming . Sed può prendere il suo input da standard in, applicare le modifiche richieste sullo stream e mettere automaticamente i risultati in standard out. La sintassi sed consente di specificare un file di input sulla riga di comando.
Non è necessario interagire con l'editor sed mentre è in esecuzione; pertanto, è stato anche definito editor batch. Ciò è in contrasto con editor come vi ed ed, che sono interattivi. Poiché sed non richiede interazione, puoi inserire comandi sed in uno script. Puoi chiamare il file di script ed eseguirlo sul file di dati per eseguire operazioni di modifica ripetitive.
Formato comando
Quanto segue mostra la sintassi per il comando sed:
# sed [options] 'action [args]' files [ > outfile]
L'editor sed è in grado di eseguire sostituzioni di schemi di testo e cancellazioni di schemi di testo utilizzando la sintassi delle espressioni regolari. Questi sono gli stessi caratteri di espressione regolare usati da grep.
Il comando sed offre funzionalità che sono un'estensione della modifica interattiva del testo. Se devi cercare e sostituire stringhe di testo in un gran numero di file, sed è molto utile.
Comandi di modifica
L'editor sed utilizza comandi di modifica (mostrati nella tabella) simili a quelli che useresti per vi ed ed.
Comando | Funzione |
---|---|
d | Elimina riga/i |
p | Stampa riga/e |
r | Legge un file |
s | Sostituisce una stringa con un'altra |
con | Scrive su un file |
Il comando sed ha due opzioni:
Opzione | Funzione |
---|---|
-n | Sopprime l'output predefinito |
-f | Legge i comandi sed da un file di script |
Dati di esempio utilizzati negli esempi
Gli esempi seguenti eseguono i comandi sed sul file denominato "data.txt". Il contenuto del file data.txt è il seguente.
# cat data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Utilizzo di sed per stampare il testo
Esempio 1:Gamma di righe di stampa
L'esempio seguente mostra l'uso del comando p (stampa), che stampa un intervallo di righe su stdout. L'intervallo è specificato da un indirizzo iniziale seguito da una virgola e quindi dall'indirizzo finale. L'output predefinito di sed è ogni riga che legge. Per eliminare l'output predefinito, utilizzare l'opzione -n.
# sed -n '3,5p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3
Esempio 2:stampa di linee contenenti un motivo specifico
Il comando seguente stampa tutte le righe con il modello a ovest al suo interno. Usa la barra (/) per delimitare l'espressione regolare.
# sed -n '/west/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33
Esempio 3:linea di stampa con più motivi
Il comando seguente stampa la prima riga contenente il motivo a ovest, fino alla riga successiva contenente il motivo a sud inclusa.
# sed -n '/west/,/southern/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45
Esempio 4:stampa di una riga con motivo e tutte le righe successive
Il comando seguente stampa la prima riga contenente il pattern Chris, fino all'ultima riga del file.
# sed -n '/Chris/,$p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Esempio 5:Funzionalità simile a grep
Il modello potrebbe contenere i caratteri dell'espressione regolare usati da grep. L'esempio seguente stampa tutte le righe che iniziano con s e finiscono con 5.
# sed -n '/^s.*5$/p' data.txt southern SO May Chin 45
Utilizzo di sed per sostituire il testo
Comando | Esempio | Azione di modifica |
---|---|---|
s | sed s/x/y/opzione | Cerca e sostituisci. Il modello di ricerca x viene sostituito con il modello y. Il modello di ricerca e sostituzione sono nella maggior parte dei casi espressioni regolari e il comportamento di ricerca e sostituzione può essere influenzato tramite varie opzioni. |
e | sed y/abc/xyz/ | Sostituisci ogni carattere del set di caratteri di origine con il carattere che ha la stessa posizione nel set di caratteri di destinazione. |
Esempio 1:cerca e sostituisci un pattern specifico
I sed s Il comando consente di eseguire un'operazione di ricerca e sostituzione sul testo. Il comando utilizza una ricerca del modello e una sostituzione di una stringa letterale. I caratteri della stringa sostitutiva vengono presi alla lettera senza l'espansione del metacarattere.
# sed 's/3/X/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster X3 southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Il comando sed controlla ogni riga del file e sostituisce la prima occorrenza della vecchia stringa con la nuova stringa. Le occorrenze successive della vecchia stringa all'interno della stessa riga rimangono invariate.
Esempio 2:cerca e sostituisci un pattern specifico a livello globale
L'esempio seguente mostra la g (globale) comando con la s (cerca e sostituisci) comando e sostituisce tutte le occorrenze della vecchia stringa con la nuova stringa.
# sed 's/3/X/g' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster XX southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Esempio 3:Cerca e sostituisci con il modello di ricerca incluso nella sostituzione
Occasionalmente con una ricerca e una sostituzione, la vecchia stringa farà parte della nuova stringa di sostituzione, operazione che puoi ottenere inserendo un &(e commerciale) nella stringa di sostituzione. La posizione di &determina la posizione della vecchia stringa nella stringa di sostituzione.
L'obiettivo dei seguenti esempi è scrivere un comando che cerchi tutte le righe che terminano con una sola cifra nell'ultimo campo e sostituisca la singola cifra con il numero a una cifra più la stringa Single Digit.
Per identificare correttamente le righe con numeri a una cifra nell'ultimo campo, considerare il seguente comando sed. Le schede separano i campi con ogni riga.
sed -n '/ [0-9]$/p' data.txt southeast SE Derek Johnson 3
Il comando seguente cerca tutte le righe che terminano con una sola cifra nell'ultimo campo e sostituisce la singola cifra con il numero a una cifra più la stringa Cifra singola.
# sed 's/ [0-9]$/& Single Digit/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 Single Digit eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Utilizzo di sed per eliminare il testo
Esempio 1:Elimina un intervallo di righe
Il comando seguente elimina le righe da 4 a 8 dall'output.
# sed '4,8d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 central CT Sheri Watson 44
Esempio 2:Eliminazione di righe contenenti uno schema specifico
Il comando seguente elimina qualsiasi riga contenente il pattern west.
# sed '/west/d' data.txt southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Esempio 3
Il comando seguente elimina qualsiasi riga che inizia con il modello ovest.
# sed '/^west/d' data.txt northwest NW Joel Craig 10 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Esempio 4
Il comando seguente elimina l'intervallo di righe che iniziano con la prima riga contenente il pattern sud, fino alla riga successiva del file contenente il nord.
# sed '/south/,/north/d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 north NO Val Shultz 91 central CT Sheri Watson 44
Funzionalità sed aggiuntiva:comandi di modifica
Ulteriori comandi dell'editor sed sono mostrati nella tabella seguente.
Comando | Funzione |
---|---|
a | Aggiunge testo |
c | Cambia il testo nella riga corrente con il nuovo testo |
io | Inserisce il testo sopra la riga corrente |
Inserimento di più modifiche in un singolo comando sed
Ci sono momenti in cui si desidera eseguire diverse modifiche al file. Invece di usare più comandi sed, puoi usare l'opzione -e per inserire le modifiche nella stessa riga di comando. Le modifiche vengono eseguite nell'ordine specificato.
Esempio 1
Elimina le righe con attenzione. È possibile eseguire modifiche su una riga di testo e successivamente rimuovere quella riga di testo dall'output. Ciò si verifica nell'esempio seguente con la riga 1 del file di input.
# sed -e 's/north/North/' -e '1,4d' data.txt southeast SE Derek Johnson 3 eastern EA Susan Beal 34 Northeast NE TJ Nichols 67 North NO Val Shultz 91 central CT Sheri Watson 44