GNU/Linux >> Linux Esercitazione >  >> Linux

Introduzione a sed (Stream Editor):utili esempi di comandi sed

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


Linux
  1. 12 utili esempi di comandi Wget in Linux

  2. Esempi utili del comando Docker ps

  3. 5 Esempi utili del comando firewall-cmd

  4. 10 Esempi di comandi Sed (Stream Editor).

  5. Esempi di comandi sed in Linux

Esempi utili di comandi Wget nel sistema Linux

15 esempi utili di comando touch nel sistema Linux

I 50 esempi pratici del comando SED in Linux

9 Esempi utili di Touch Command in Linux

10 esempi utili del comando di ordinamento in Linux

12 Esempi utili di comandi data di Linux