GNU/Linux >> Linux Esercitazione >  >> Linux

10 Esempi di comandi Sed (Stream Editor).

Sed è un editor di flussi in un sistema operativo simile a UNIX che viene utilizzato per filtrare e trasformare il testo. Sed deriva originariamente dall'editor di linea di base 'ed', un editor che troverai su ogni sistema Unix ma che viene utilizzato raramente a causa della sua difficile interfaccia utente.

Come funziona sed?

Poiché sed è un editor di flussi, fa il suo lavoro su un flusso di dati che riceve da stdin, ad esempio attraverso una pipe, scrivendo i suoi risultati come flusso di dati su stdout (spesso schermo del desktop). Possiamo reindirizzare questo output su un file . Sed in genere non modifica un file di input originale; possiamo invece inviare il contenuto del nostro file tramite una pipe per essere elaborato da sed. Ciò significa che non abbiamo bisogno di avere un file sul disco con i dati che vuoi modificare, questo è particolarmente utile se hai dati provenienti da un altro processo piuttosto che già scritti in un file.

Sintassi di sed

# sed [option] commands [input-file]

In questo post discuteremo alcuni degli esempi pratici del comando sed, faremo molte operazioni sed sul file 'passwd', quindi prima copia il file '/etc/passwd' nella cartella /tmp.

# cp /etc/passwd /tmp/

Esempio 1:Cancellazione di tutte le Linee con sed

# cat /tmp/passwd | sed 'd'

Il comando precedente ha inviato l'intero contenuto del file /tmp/passwd tramite una pipe a sed. Tieni presente che il file /tmp/passwd non è stato modificato affatto. Sed ha letto solo il contenuto del file e non gli abbiamo detto di scrivere nel file, ma solo di leggere da esso. I risultati della modifica dei comandi su ciascuna riga stampati sullo standard output. In questo caso, sullo schermo non è stato stampato nulla perché abbiamo utilizzato l'opzione 'd' per eliminare ogni riga.

Esempio 2:Invocare sed con l'opzione '-e' (aggiungere lo script ai comandi da eseguire)

Invece di invocare sed inviandogli un file tramite una pipe, possiamo istruire sed a leggere i dati da un file come mostrato nell'esempio seguente.

# sed -e 'd' /tmp/passwd
#

Richiamando sed in questo modo si definisce esplicitamente il comando di editing come uno script sed da eseguire sul file di input /tmp/passwd. Lo script è semplicemente un comando di modifica di un carattere qui, ma potrebbe essere molto più grande.

Possiamo anche reindirizzare l'output standard dal comando sed in un file.

# sed -e 'd' /tmp/passwd > /tmp/new-passwd

Esempio 3:stampa di linee usando sed (-n flag &comando p)

Il flag '-n' disabilita la stampa automatica in modo che sed stampi invece le righe solo quando gli viene esplicitamente detto di farlo con il comando 'p'.

# cat /tmp/passwd | sed 'p' | head -5
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

Come vediamo sopra, se specifichiamo il comando di modifica 'p' senza flag '-n', sed stamperà righe duplicate. Quindi, per visualizzare linee univoche, usa il flag '-n' con il comando p in sed. Di seguito sono riportati degli esempi:

# cat /tmp/passwd | sed -n 'p' | head -5
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

Esempio 4:modifica del file di origine utilizzando l'opzione '-i'

Il comando Sed per impostazione predefinita non modifica il file originale o sorgente per la nostra sicurezza, ma utilizzando l'opzione '-i' il file sorgente può essere modificato.

# sed -i '1d' /tmp/passwd

Il comando sopra eliminerà la prima riga del file sorgente /tmp/passwd.

Esempio 5:esegui il backup del file sorgente prima della modifica

Quando utilizziamo l'opzione '-i' nel comando sed, diventa molto rischioso perché modificherà direttamente il file sorgente, quindi è meglio eseguire il backup del file sorgente prima della modifica, l'esempio è mostrato di seguito.

# sed -i.bak '1d' /tmp/passwd
# ls -l /tmp/passwd*
-rw-r--r-- 1 root root 2229 Nov 24 22:36 /tmp/passwd
-rw-r--r-- 1 root root 2261 Nov 24 22:35 /tmp/passwd.bak

Nel comando sed sopra, la prima riga del file /tmp/passwd verrà eliminata ma prima che il comando sed esegua il backup di /tmp/passwd come /tmp/passwd.bak.

Esempio 6:eliminazione delle righe specificando l'intervallo.

Eliminazione delle prime 5 righe del file /tmp/passwd.

# cat /tmp/passwd | sed '1,5d'

Esempio 7:Elimina le righe vuote di un file

# cat /tmp/detail.txt 
245
678

linux
unix

suse

Nel file details.txt abbiamo due righe vuote, usa il comando seguente per eliminare le righe vuote.

# sed '/^$/d' /tmp/detail.txt
245
678
linux
unix
suse

Esempio 8:Eliminazione delle righe contenenti le stringhe

Supponiamo di voler eliminare la riga dal file /tmp/passwd che contiene la parola "giochi".

# sed '/games/d' /tmp/passwd

Esempio 9:ricerca e sostituzione di stringhe nel file

Supponiamo di voler sostituire "root" con "Admin", l'esempio è mostrato di seguito:

# sed 's/root/Admin/' /tmp/passwd

È molto importante notare che sed sostituisce solo la prima occorrenza su una riga. Se la stringa 'root' compare più di una volta su una riga, verrà sostituita solo la prima corrispondenza. Per sostituire ogni stringa nel file con quella nuova anziché solo con la prima occorrenza, per effettuare la sostituzione globalmente aggiungi una lettera 'g' alla fine del comando come mostrato di seguito:

# sed 's/root/Admin/g' /tmp/passwd

Esempio 10:sostituzione multipla utilizzando l'opzione -e

Supponiamo di voler sostituire la stringa "root" con "Admin" e la stringa "bash" con "sh". L'esempio è mostrato di seguito:

# cat /tmp/passwd | sed -e 's/root/Admin/g' -e 's/bash/sh/g'


Linux
  1. Comando mv in Linux:7 esempi essenziali

  2. Esempi di comandi tail di Linux

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

  4. ln Esempi di comandi in Linux

  5. altri esempi di comandi in Linux

Comando Linux WC con esempi

Esempi di comandi di Linux cat

Esempi di comandi gzip di Linux

Esempi di comandi dumpe2fs in Linux

Esempi di comandi fsck in Linux

Esempi di comandi mkfs in Linux