SED abbreviato in "Stream Editor" è un potente editor di flussi di testo in grado di eseguire molte funzioni su file che cercano, trovano, sostituiscono e inseriscono. Il comando sed è un comando a conoscenza delle espressioni regolari, significa che può comprendere le espressioni regolari fornite.
Tuttavia, SED è utilizzato principalmente o principalmente per la sostituzione del testo. Con l'aiuto di SED, possiamo modificare i file senza aprirlo, il che sarà molto più veloce e veloce per trovare e sostituire qualcosa in un file, piuttosto che aprire il file e cambiarlo.
In questo tutorial impareremo il comando SED con esempi facili da usare e comprensibili nella nostra shell Linux.
Sintassi del comando Sed
La sintassi del comando Sed è piuttosto semplice da capire ma è molto potente in uso. Ecco la sintassi di base di SED come segue:
sed OPTIONS... [SCRIPT] [INPUTFILE...]
Considera il file di testo sottostante ("content.txt") come input per il comando sed examples.
$ cat > content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
Ecco gli esempi di sed più utilizzati come segue.
1. Sostituzione di una stringa (parole o caratteri)
Sed può essere utilizzato per trovare e sostituire una stringa (parole o caratteri) nell'input. L'opzione s
viene utilizzato per sostituire una stringa. Per impostazione predefinita, il comando sed sostituisce solo la prima occorrenza della stringa in una riga.
Il comando seguente sostituisce la parola 'lorem' con 'Lorem' nel file 'content.txt' per la prima occorrenza in ogni riga:
$ sed 's/lorem/Lorem/' content.txt
Qui 'lorem' è la stringa di ricerca e 'Lorem' è la stringa di sostituzione.
Output
$ sed 's/lorem/Lorem/' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
2. Sostituisci tutte le occorrenze di una stringa in un file
Per cercare e sostituire tutte le occorrenze di una stringa in un file usa /g
flag (sostituzione globale).
Nel comando seguente, /g
flag viene utilizzato per sostituire tutte le occorrenze della stringa 'lorem' con 'Lorem' nel file 'content.txt'.
$ sed 's/lorem/Lorem/g' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
3. Sostituzione dell'ennesima occorrenza di un pattern in una riga
Il comando sed può essere utilizzato con /1
,/2
o n
(qualsiasi numero) per sostituire la prima, la seconda o l'ennesima occorrenza di una stringa in una riga.
Il comando seguente sostituisce la seconda (2) occorrenza della parola 'lorem' con 'Lorem' in ogni riga.
$ sed 's/lorem/Lorem/2' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
Simile al comando tr, sed può sostituire tutte le occorrenze dei caratteri in set1 con i caratteri corrispondenti in set2 usando y/set1/set2/
.
$ echo 'a for apple' | sed -e 'y/af/AF/
Output
A For Apple
4. Sostituisci dall'ennesima occorrenza a tutte le occorrenze in ogni riga
Possiamo usare una combinazione di /1
,/2
o n
(qualsiasi numero) e /g
per sostituire tutti i modelli dall'ennesima occorrenza di una stringa in ogni riga.
Nell'esempio seguente, tutte le occorrenze della stringa 'lorem' verranno sostituite con 'Lorem' dalla seconda occorrenza in ogni riga:
$ sed 's/lorem/Lorem/2g' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
5. Cerca e sostituisci una stringa su un numero di riga specificato
Con sed, possiamo limitare la funzione solo per sostituire la stringa su un numero di riga specifico.
Nel comando seguente, possiamo scoprire che solo la seconda riga è sostituita dalla stringa 'Lorem'.
$ sed '2 s/lorem/Lorem/' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
6. Visualizza il testo parziale di un file
Usando il comando sed puoi visualizzare una parte di un file anziché l'intero file. Il -n
l'opzione viene utilizzata per sopprimere la stampa di tutto il contenuto e p
viene utilizzata l'opzione stampa righe specifiche.
Il comando seguente stamperà le righe da 2 a 4:
$ sed -n 2,4p content.txt
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
7. Visualizza tutti i contenuti eccetto righe particolari
Il comando Sed consente di visualizzare tutti i contenuti del file eccetto righe particolari. Nel comando seguente mostra tutto il contenuto del file 'content.txt' eccetto le righe 1 e 2:
$ sed 1,2d content.txt
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
8. Visualizza tutte le linee tranne la linea di corrispondenza del modello
Possiamo usare il seguente comando sed per eliminare la riga che ha il modello di ricerca menzionato. Nell'output, la riga con "learn" viene eliminata perché corrisponde al modello di ricerca.
$ sed '/learn/d' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
9. Visualizza le righe sostituite
Per stampare le righe sostituite, utilizziamo /p
flag insieme a -n
.
Nell'output, possiamo vedere che non c'è l'ultima riga perché non aveva il modello di ricerca 'lorem'.
$ sed -n 's/lorem/Lorem/p' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Altri esempi di 'p' e 'n' flag
Stampa la prima riga
$ sed -n '1p' content.txt
Stampa intervallo di riga
$ sed -n '1,4p' content.txt
Stampa più righe
$ sed -n '1p;4p' content.txt
Stampa un file
$ sed -n 'p' content.txt
La stampa contiene espressioni regolari o parole
$ sed -n '/RedHat/p' content.txt
Stampa se contiene cifre
$ sed -n '/[0-9]/p' content.txt
Abbina l'espressione regolare e sostituisci
$ sed -n 's/^L/Matched--&/p' content.txt
Output
Matched--Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Matched--Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Matched--Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Usa sed come grep
Il seguente comando sed cercherà l'utente 'root' nel file '/etc/passwd':
$ sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
10. Combina comandi SED
Se dobbiamo eseguire più espressioni sed, dobbiamo usare e
opzione per concatenare i comandi sed.
Facciamo un esempio, sostituendo tutte le occorrenze del "lorem" con "Lorem" ed eliminando la riga che corrisponde al pattern di ricerca.
$ sed -e 's/lorem/Lorem/g' -e '/learn/d' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
11. Inserisci una riga vuota dopo ogni riga
Usando G
opzione puoi inserire una o più righe vuote in un file.
Il comando seguente inserisce una singola riga vuota tra le righe:
$ sed G content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
Per inserire due righe vuote eseguire il comando seguente:
$ sed 'G;G' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
11. Modifica e crea una copia di backup del file originale
Sed permette di modificare un file e allo stesso tempo creare una copia di backup del file originale. Usiamo 'i.-e
modifica.
Il comando seguente crea un backup del file originale 'content.txt' come 'content.txt.bak'
$ sed -i.bak -e 's/lorem/Lorem/g' content.txt
Results
$ cat content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
$ cat content.txt.bak
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
12. Eliminazione di una linea con un motivo
Usando questo comando sed, puoi eliminare una riga che inizia con una stringa particolare e termina con un'altra stringa. Nell'output seguente, la riga che inizia con 'lorem' e termina con 'testo.' viene cancellato:
$ sed -e 's/^lorem.*text.$//g' content.txt
Output
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
13. Aggiunta di una stringa alle righe
Possiamo eseguire il seguente comando per aggiungere del contenuto prima di ogni riga usando regex.
Nell'output seguente, possiamo vedere che 'Qui' viene aggiunto prima di ogni riga.
$ sed -e 's/.*/Here &/' content.txt
Here lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Here lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Here lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Here learn more about dummy text.
Inserisci la stringa prima di ogni riga:
$ sed 'i \inserted line' content.txt
inserted line
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
inserted line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
inserted line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
inserted line
learn more about dummy text.
Aggiungi una stringa dopo ogni riga:
$ sed 'a \Appended line' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Appended line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Appended line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Appended line
learn more about dummy text.
Appended line
14. Estrai i nomi utente dal file /etc/passwd
Il comando Sed può essere facilmente utilizzato per ottenere l'elenco di tutti i nomi utente dal file '/etc/passwd'.
Il seguente comando sed estrarrà tutti i nomi utente disponibili linux:
$ sed 's/\([^:]*\).*/\1/' /etc/passwd root daemon bin sys sync man lp news uucp proxy backup list gnats nobody systemd-network systemd-resolve syslog messagebus uuidd debian-spamd
admin
15. Stampa riga senza righe commentate (#) e righe vuote
La stampa senza righe commentate (#) e le righe vuote è semplice con sed.
Possiamo eseguire il comando seguente per stampare tutte le righe che non contengono il simbolo di commento (#) e tutte le righe vuote.
$ sed -e 's/#.*//;/^$/d' content.txt
Per rimuovere solo le righe commentate:
$ sed -e 's/#.*//' content.txt
16. Estrai tutti gli indirizzi IP con sed da una stringa
Controlliamo come estrarre gli indirizzi IP usando il comando sed con regex. Ho aggiunto alcuni indirizzi IP a 'content.txt' per il test.
$ cat content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137
Ora usa regex per estrarre l'indirizzo IP dal file 'content.txt' come segue:
$ sed '/\n/!s/[0-9.]\+/\n&\n/;/^\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\n/P;D' content.txt
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137
Ho trovato un altro comando facile per ottenere gli stessi risultati, controlla di seguito:
$ sed -n '/[0-9]/p' content.txt.bak
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137
Possiamo anche combinare sed con altri comandi usando pipe (|), controlla l'esempio seguente:
$ ip addr | sed -n '/inet/p' | sed -e 's/ */ /g' | cut -d ' ' -f3
127.0.0.1/8
::1/128
75.208.225.10/24
2600:3c02::e03c:92ff:fe60:d7e2/64
fe80::f03c:92ef:fe60:d7e2/64
17. Reindirizza e scrivi su un file
Il w
flag può essere utilizzato per scrivere l'output in un file, invece di stampare sull'output standard. Il w
Il comando richiede un nome file in cui verrà scritto l'output.
Il seguente comando sed reindirizzerà l'output a un nuovo file 'rootpwd.txt':
$ sed -n '/root/w rootpwd.txt' /etc/passwd
$ cat rootpwd.txt
root:x:0:0:root:/root:/bin/bash
Conclusione
In questo tutorial sui comandi Linux, abbiamo appreso la sintassi di base del comando sed e con gli esempi sed più comunemente usati. È possibile utilizzare sed in bash o script di shell per eseguire diverse attività automatizzate nella manipolazione del testo e operazioni sed nella shell di Linux. Con questo tutorial, puoi facilmente capire sed e iniziare subito a implementarlo quando richiesto. Se hai domande, suggerimenti, feedback, scrivili nella casella dei commenti qui sotto.