GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare il comando Sed in Linux con esempi

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.' per il nome del file di backup e -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.


Linux
  1. Come utilizzare il comando Hexdump di Linux con esempi pratici

  2. Come utilizzare pipe e pipe con nome in Linux (con esempi)

  3. Comando SCP in Linux:come usarlo, con esempi

  4. Come utilizzare il comando Rmmod su Linux con esempi

  5. Come utilizzare il comando Dig in Linux con esempi

Come utilizzare il comando who in Linux con esempi

Comando alias Linux:come usarlo con esempi

Come utilizzare il comando gunzip di Linux con esempi

Come utilizzare il comando Linux rm con esempi

Come installare e utilizzare il comando Ack in Linux con esempi

Come utilizzare il comando Sleep in Linux:spiegato con esempi