Introduzione
SED è un editor di flussi di testo utilizzato sui sistemi Unix per modificare i file in modo rapido ed efficiente. Lo strumento ricerca, sostituisce, aggiunge ed elimina le righe in un file di testo senza aprire il file in un editor di testo.
Scopri come utilizzare il sed
comando e le sue opzioni attraverso esempi facili da seguire.
Sintassi con Linux
La sintassi principale per l'utilizzo di Linux sed
il comando è:
sed OPTIONS... [SCRIPT] [INPUTFILE...]
Opzioni Linux sed
Puoi eseguire sed
con le seguenti opzioni della riga di comando:
-b , --binary | Apri i file di input in modalità binaria per considerare che le righe finiscano con un avanzamento riga. |
--debug | Passa alla modalità debug per stampare l'input in forma canonica e annotare l'esecuzione del programma. |
--follow-symlinks | Modifica la destinazione finale se il file specificato è un collegamento simbolico. Funziona solo se combinato con -i opzione. |
--help | Visualizza le informazioni sull'utilizzo. |
--i , --in-place [=SUFFIX] | Esegui modifiche sul posto sovrascrivendo il file originale. |
--posix | Disabilita tutte le estensioni a POSIX sed per semplificare la scrittura di script portatili. |
--version | Mostra la versione di sed in esecuzione sul sistema. |
-E , -r , --regexp-extended | Utilizza espressioni regolari estese. |
-e <em>script</em> , --expression=<em>script</em> | Aggiungi uno script specifico da eseguire con i comandi. |
-f <em>script-file</em> | Aggiungi il contenuto di un file di script specificato da eseguire con i comandi. |
-l <em>N</em> , --line-length=<em>N</em> | Definisci la lunghezza di ritorno a capo desiderata per il l comando (il valore predefinito è 70). |
-n , --quiet , --quiet | Disabilita la stampa dell'output. |
-s , --separate | Visualizza i file specificati come separati, non come un unico lungo flusso continuo. |
--sandbox | Disabilita l'esecuzione di programmi esterni e opera solo sui file di input sulla riga di comando. |
-u , --unbuffered | Riduci al minimo il buffer di input e output. |
-z , --null-data , --zero-terminated | Visualizza l'input come un insieme di righe in cui ciascuna termina con un byte zero. |
Esempi di Linux sed
Di seguito mostriamo dieci sed
di uso comune comandi, esempi e sintassi.
Per questo tutorial, abbiamo creato un file di esempio con il nome foxinbox.tx t con il seguente contenuto:
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
Nota che sed
non influisce sul file di origine se non indicato. Al contrario, il comando visualizza le modifiche apportate dal comando specificato nel suo output.
Per sovrascrivere il file originale, utilizza il -i
opzione per salvare le modifiche. Tuttavia, tale pratica non è consigliata prima di testare l'output del comando.
In alternativa, salva le modifiche in un file diverso (o nuovo). Reindirizza l'output aggiungendo > newfilename.txt
alla fine del comando.
Sostituisci stringa usando il comando sed
Il sed
di Linux comando è più comunemente usato per sostituire il testo. Cerca il modello specificato in un file e lo sostituisce con la stringa desiderata.
Per sostituire il testo utilizzando sed
, usa il comando sostitutivo s
e delimitatori (nella maggior parte dei casi, barre - /
) per separare i campi di testo.
Pertanto, la sintassi per la sostituzione del testo è:
sed 's/old_string/new_string/' filename.txt
Sostituisci old_string
con il testo che vuoi sostituire e new_string
con il testo in cui vuoi cambiarlo.
Ad esempio, per sostituire le istanze di box
con la parola bin
, esegui:
sed 's/box/bin/' foxinbox.txt
L'output mostra il testo con le parole sostituite, come nell'immagine sottostante.
Sostituisci tutte le occorrenze di String usando il comando sed
Per impostazione predefinita, sed
sostituisce solo la prima occorrenza della stringa specificata in ogni riga. Cerca la prima istanza della parola specificata in una riga, la sostituisce e passa alla riga successiva.
Con più istanze della parola box
nella stessa riga, il comando sostituisce solo il primo.
Se hai più istanze della stessa parola all'interno di una singola riga, aggiungi il g
flag al comando per cambiarli tutti.
Il comando per sostituire ogni occorrenza di una determinata stringa all'interno di un testo è:
sed 's/old_string/new_string/g' filename.txt
Per sostituire la parola box
con la parola bin
nel file foxinbox.txt ogni volta, digita:
sed 's/box/bin/g' foxinbox.txt
L'output sopra mostra che il comando ha sostituito tutte le istanze della parola box
.
Sostituisci una ricorrenza specifica in una riga usando il comando sed
Il sed
Il comando consente di scegliere quale occorrenza di una stringa specificata si desidera sostituire all'interno di ogni riga. A tale scopo, aggiungi un contrassegno numerico come 1
, 2
, ecc.:
sed 's/old_string/new_string/#' filename.txt
Ad esempio, per sostituire la seconda occorrenza della parola box
in ogni riga del testo con la parola bin
, usa questo comando:
sed 's/box/bin/2' foxinbox.txt
Il comando ha saltato tre istanze della parola perché erano le prime della riga e ha sostituito solo quella alla fine.
Stampa solo righe con testo sostitutivo
Per impostazione predefinita, il sed
comando stampa l'intero contenuto del file, insieme al testo sostitutivo nel suo output. Se hai molto testo e vuoi concentrarti sulle righe con le modifiche applicate, aggiungi gli attributi necessari al comando.
Per stampare solo le righe che hanno la sostituzione nelle condizioni date, usa la sintassi:
sed -n 's/old_string/new_string/p' filename.txt
Il -n
l'opzione disabilita la stampa automatica, mentre il comando sostitutivo p
indica sed
per stampare le righe in cui avviene la sostituzione.
Puoi aggiungere il p
comando ad altri comandi sostitutivi, come nell'esempio seguente:
sed -n 's/box/bin/2p' foxinbox.txt
Il comando sostituisce la seconda istanza della parola box
in una riga e stampa la riga in cui è avvenuta la modifica. Nell'immagine qui sotto, vedi solo una riga con la sostituzione applicata.
Sostituisci stringa usando il comando sed e ignora maiuscole/minuscole
Per impostazione predefinita, il sed
il comando fa distinzione tra maiuscole e minuscole. Ad esempio, il seguente contenuto contiene la parola fox
con lettere iniziali maiuscole e minuscole:
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
Per sostituire tutte le istanze della parola volpe , non eseguire il solito comando:
sed 's/fox/cow/' foxinbox.txt
Il risultato del comando cambia solo l'occorrenza della parola fox
dove è interamente minuscolo:
Per ignorare le maiuscole e minuscole durante la sostituzione del testo, aggiungi il i
sottocomando alla fine del comando:
sed 's/old_string/new_string/i' filename.txt
Da qui il comando per cambiare le istanze maiuscole e minuscole della parola fox nel testo sopra è:
sed 's/fox/cow/i' foxinbox.txt
L'output mostra che il comando ha modificato tutte e tre le istanze della stringa specificata.
Sostituisci stringa in una riga specifica usando il comando sed
Il sed
Il comando consente di sostituire una stringa in una riga specifica aggiungendo il numero di riga come prefisso alle s
sottocomando:
sed '# s/old_string/new_string/' filename.txt
Per testare questa funzione sull'esempio foxinbox.txt file, sostituisci la parola socks
con sandals
solo nella quarta riga (4
) del testo utilizzando il comando:
sed '4 s/socks/sandals/' foxinbox.txt
L'output mostra che la prima istanza della parola socks
nella seconda riga rimane la stessa, mentre la stessa parola è stata sostituita con sandals
nella quarta riga.
Sostituisci stringa solo in un intervallo di righe specifico utilizzando il comando sed
Per sostituire più istanze di una stringa all'interno di un intervallo di righe, ma non l'intero testo, specifica l'intervallo in cui desideri sed
sostituire. La sintassi è:
sed '#,# s/old_string/new_string/' filename.txt
Sostituisci il primo #
con il numero di riga iniziale e il secondo #
con l'ultimo numero di riga che desideri includere.
Ad esempio, per sostituire le ultime due istanze della parola calzini nel file foxinbox.txt (situato nella quarta e nella sesta riga) con la parola sandals
, eseguiresti:
sed '4,6 s/socks/sandals/' foxinbox.txt
Elimina una riga specifica usando il comando sed
Per eliminare una riga da un file con sed
comando, utilizzare il d
sottocomando e la sintassi:
sed '#d' filename.txt
Specifica il numero di riga che desideri rimuovere al posto dell'hash (#
) ed eseguire il comando.
Ad esempio, per rimuovere la seconda riga da foxinbox.txt file, digita:
sed '2d' foxinbox.txt
Elimina le linee all'interno di un intervallo specifico di linee utilizzando il comando sed
Per eliminare più righe all'interno di un intervallo di righe utilizzando il sed
comando, segui la sintassi:
sed '#,#d' filename.txt
Sostituisci i simboli hash con l'inizio e la fine dell'intervallo di righe. Ad esempio:
sed '2,4d' foxinbox.txt
Il comando sopra elimina le righe 2, 3 e 4 dal file.
Elimina dallo specifico all'ultima riga utilizzando il comando sed
Per eliminare le righe da un numero di riga specifico all'ultima riga, utilizzare il comando:
sed '#,$d' filename.txt
Cioè, rimuovere tutto dalla riga 3 alla fine di foxinbox.txt , esegui questo comando:
sed '3,$d' foxinbox.txt