Introduzione
Il sed (s tream ndr itor) è uno strumento di analisi e trasformazione del testo orientato alla riga. Il sed
comando utilizza un semplice linguaggio di programmazione ed espressioni regolari per elaborare flussi di testo e file. La funzione più utilizzata del sed
il comando è la sostituzione di una stringa.
Questa guida mostra come utilizzare sed
per trovare e sostituire stringhe tramite esempi.

Prerequisiti
- Accesso alla riga di comando/terminale.
- Un file di testo (questa guida fornisce un example.txt file).
- Comandi di base del terminale (prendi il nostro cheat sheet gratuito).
sed Trova e sostituisci sintassi
La sintassi per trovare e sostituire il testo utilizzando il sed
il comando è:
sed -i 's/<search regex>/<replacement>/g' <input file>
Il comando è composto da:
-i
dice alsed
comando per scrivere i risultati in un file invece dell'output standard.s
indica il comando sostitutivo./
è il carattere delimitatore più comune. Il comando accetta anche altri caratteri come delimitatori, il che è utile quando la stringa contiene barre in avanti.<search regex>
è il parametro di ricerca della stringa o dell'espressione regolare.<replacement>
è il testo sostitutivo.g
è il flag di sostituzione globale, che sostituisce tutte le occorrenze di una stringa anziché solo la prima.<input file>
è il file in cui avviene la ricerca e la sostituzione.
Le virgolette singole aiutano a evitare l'espansione dei metacaratteri nella shell.
La versione BDS di sed
(che include macOS) non supporta la corrispondenza senza distinzione tra maiuscole e minuscole o la sostituzione dei file. Il comando per la sostituzione dei file è simile al seguente:
sed 's/<search regex>/<replacement>/g' <input file> > <output file>
In alternativa, installa la versione GNU di sed
su macOS con homebrew:
brew install gnu-sed
Esegui il sed
GNU comando come segue:
gsed -i 's/<search regex>/<replacement>/g' <input file>
Sostituisci il sed
comando con gsed
per seguire gli esempi seguenti.
Esempi di sostituzione sed
Gli esempi di questa guida utilizzano un file di esempio per sostituire le stringhe.
1. Crea un file di testo di esempio:
nano example.txt
2. Aggiungi i seguenti contenuti:
foobarbazfoobarbaz
foo bar baz foo bar baz
Foo Bar Baz Foo Bar Baz
FOO BAR BAZ FOO BAR BAZ
/foo/bar/baz /foo/bar/baz

Usa il file come input per testare gli esempi seguenti.
Nota :Per un sed
completo command tutorial per Linux, consulta la nostra guida sed command Linux.
Sostituisci la prima stringa abbinata
1. Per sostituire la prima istanza trovata della parola bar con linux in ogni riga di un file, esegui:
sed -i 's/bar/linux/' example.txt
2. Il -i
tag inserisce le modifiche in example.txt file. Controlla il contenuto del file con il comando cat:
cat example.txt

Il comando sostituisce la prima istanza di bar con linux in ogni riga, comprese le sottostringhe. La corrispondenza è esatta, ignorando le variazioni delle maiuscole.
Sostituzione globale
Per sostituire ogni corrispondenza di stringa in un file, aggiungi il g
flag allo script. Ad esempio:
sed -i 's/bar/linux/g' example.txt

Il comando sostituisce globalmente ogni istanza di bar con linux nel file.
Abbina e sostituisci tutti i casi
Per trovare e sostituire tutte le istanze di una parola e ignorare le maiuscole, utilizza il I
parametro:
sed -i 's/bar/linux/gI' example.txt

Il comando sostituisce tutte le istanze della parola bar nel testo, ignorando le maiuscole.
Ignora le sottostringhe
Aggiungi i limiti delle parole (\b
) al sed
comando per ignorare le sottostringhe quando si sostituiscono le stringhe in un file. Ad esempio:
sed -i 's/\bbar\b/linux/gI' example.txt
In alternativa, cambia il delimitatore per rendere il comando più leggibile:
sed -i 's:\bbar\b:linux:gI' example.txt

Il comando ignora le sottostringhe, facendo corrispondere solo l'intera parola.
Trova e sostituisci le stringhe con le barre
Escludere il carattere barra in avanti per trovare e sostituire una stringa con barre. Ad esempio, per sostituire /foo/bar/baz con /home/kb , usa la seguente sintassi:
sed -i 's/\/foo\/bar\/baz/\/home\/kb/g' example.txt
In alternativa, cambia il delimitatore per evitare l'escape dei caratteri:
sed -i 's:/foo/bar/baz:/home/kb:g' example.txt

Usa questa sintassi per sostituire percorsi e altre stringhe con barre.
Trova e sostituisci con espressioni regolari
Il modello di ricerca per il sed
il comando accetta espressioni regolari, simili a grep regex. Ad esempio, per abbinare tutte le lettere maiuscole e sostituirle con 5 , usa:
sed -i 's/[A-Z]/5/g' example.txt

Il modello regex aiuta a trovare tutte le lettere maiuscole e le sostituisce con il numero nel file.
Stringa trovata riferimento
Usa il carattere e commerciale (&
) per fare riferimento alla stringa trovata. Ad esempio, per aggiungere una barra (/ ) prima di ogni istanza di foo in un file, usa:
sed -i 's/foo/\/&/gI'example.txt

Invece di ridigitare il parametro di ricerca, il &
sign fa riferimento alla stringa trovata.
Crea un backup
Per creare un file di backup prima di sovrascrivere quello esistente, aggiungi il .bak
parametro al -i
tag.
sed -i.bak 's/foo/FOO/g' example.txt

Il comando crea un backup (example.txt.bak
) prima di sovrascrivere l'originale. Usa questo metodo per mantenere una copia nel formato originale ed evitare di sovrascriverla.
Trova e sostituisci ricorsivo
Usa il comando trova per cercare i file e combinalo con sed
per sostituire le stringhe nei file in modo ricorsivo. Ad esempio:
find -name 'example*' -exec sed -i 's/[a-z]/5/gI' {} +

Il comando trova tutti i file che iniziano con esempio ed esegue il sed
comando sui file. Il comando eseguito sostituisce tutte le lettere con 5 , ignorando le maiuscole.
Conclusione
Dopo aver esaminato gli esempi in questa guida, sai come utilizzare sed
per sostituire le stringhe nei file. Il sed
command è una potente utilità di manipolazione del testo con molte funzionalità avanzate.
Quindi, controlla il comando awk o gawk per conoscere altri strumenti di manipolazione del testo.