LINUX

Come utilizzare il comando Sed in Linux con esempi

SED abbreviato in “Stream Editor” è un potente editor di flussi di testo che può eseguire molte funzioni sul file che cercano, trovano, sostituiscono e inseriscono. Il comando sed è un comando che riconosce le espressioni regolari, il che significa che può comprendere le espressioni regolari che gli vengono fornite.

Tuttavia, SED viene utilizzato principalmente o principalmente per la sostituzione del testo. Con l’aiuto SEDE CENTRALEpossiamo modificare i file senza aprirli, il che sarà molto più rapido e veloce per trovare e sostituire qualcosa in un file piuttosto che aprire il file e modificarlo.

In questo tutorial impareremo il comando SED con esempi facili da usare e da capire nella nostra shell Linux.

Sintassi del comando Sed

La sintassi del comando Sed è abbastanza semplice da capire, ma molto potente da usare. Ecco la sintassi di base di SED come segue:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Considera il file di testo qui sotto (‘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 più usati di sed come segue.

1. Sostituzione di stringhe (parole o caratteri)

Sed può essere utilizzato per trovare e sostituire una stringa (parole o caratteri) in input. opzione s è usato per sostituire una stringa. Per impostazione predefinita, il comando sed sostituisce solo la prima occorrenza della stringa su una riga.

Il seguente comando sostituisce la parola “lorem” con “Lorem” nel file “content.txt” per la prima occorrenza di 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. Sostituire tutte le occorrenze di una stringa in un file

Per cercare e sostituire tutte le occorrenze di una stringa in un file, utilizzare /g flag (sostituzione globale).

Nel comando successivo, /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 di nessuna occorrenza di un motivo 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 su una riga.

Il seguente comando 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. Sostituire dalla prima occorrenza a tutte le occorrenze in ciascuna 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 di ciascuna 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. Trovare e sostituire una stringa su un numero di riga specificato

Con sed, possiamo restringere la funzione per sostituire solo la stringa su un numero di riga specifico.

Nel comando seguente, possiamo vedere che solo la seconda riga viene sostituita con la 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. Visualizzare il testo parziale di un file

Utilizzando il comando sed è possibile visualizzare parte di un file piuttosto che l’intero file. Il -n opzione viene utilizzata per sopprimere la stampa di tutto il contenuto e p viene utilizzata l’opzione per stampare righe specifiche.

Il seguente comando 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 tutto il contenuto tranne alcune righe

Il comando Sed permette di visualizzare l’intero contenuto del file ad eccezione di alcune righe. Nel seguente comando, visualizza tutto il contenuto nel file “content.txt” ad eccezione delle 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. Visualizzare tutte le linee tranne la linea di adattamento del modello

Possiamo usare il seguente comando sed per eliminare la riga che ha il modello di ricerca menzionato. Nel risultato, la riga con “learning” 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. Visualizzare le righe sostituite

Per stampare le righe sostituite, usiamo /p bandiera insieme a -n.

Nel risultato, possiamo vedere che l’ultima riga non esiste 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 flag “p” e “n”.

Stampa la prima riga

$ sed -n '1p' content.txt

Interlinea di stampa

$ sed -n '1,4p' content.txt

Stampa più righe

$ sed -n '1p;4p' content.txt

Stampa un file

$ sed -n 'p' content.txt

Print contiene regex o espressioni di parole

$ sed -n '/RedHat/p' content.txt

Stampa se contiene cifre

$ sed -n '/[0-9]/p' content.txt

Abbina regex 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 i comandi SED

Se abbiamo bisogno di eseguire più istruzioni sed allora dobbiamo usare e opzione per concatenare i comandi sed.

Facciamo un esempio, sostituendo tutte le occorrenze di “lorem” con “Lorem” ed eliminando la riga che corrisponde al modello 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. Inserire una riga vuota dopo ogni riga

uso G opzione è possibile inserire una o più righe vuote in un file.

Il seguente comando 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. Modificare e creare una copia di backup del file originale

Sed consente di modificare un file e allo stesso tempo creare una copia di backup del file originale. Usiamo “i.” per il nome del file di backup e -e la modifica.

Il seguente comando crea una copia di backup del file “content.txt” originale 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 certa stringa e termina con un’altra stringa. Nell’output seguente, la riga che inizia con “lorem” e termina con “text”. 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 stringhe alle linee

Possiamo eseguire il seguente comando per aggiungere contenuto prima di ogni riga usando regex.

Nell’output seguente, possiamo vedere che “Here” viene aggiunto davanti a 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. Estrarre il nome utente dal file /etc/passwd

Il comando Sed può essere facilmente utilizzato per ottenere l’intero elenco di tutti i nomi utente nel file “/etc/passwd”.

Il seguente comando sed estrarrà tutti i nomi utente Linux disponibili:

$ 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 la riga senza righe commentate (#) e righe vuote

La stampa senza righe commentate (#) e righe vuote è semplice con sed.

Possiamo eseguire il seguente comando 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 semplice comando 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 qui sotto:

$ 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. Reindirizzare e scrivere su un file

Il w flag può essere usato per scrivere l’output su un file invece di stampare sullo standard output. Il w il comando richiede un nome file su cui scrivere 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 di Linux, abbiamo appreso la sintassi di base del comando sed e gli esempi sed più comuni e utilizzati. Si può usare sed in bash o script di shell per eseguire varie attività automatizzate nella manipolazione del testo e operazioni sed nella shell di Linux. Con questo tutorial, puoi facilmente comprendere sed e avviare l’implementazione immediata quando necessario. Se hai domande, suggerimenti, feedback, scrivili nella casella dei commenti qui sotto.

Related Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Back to top button
Close