Introduzione
Sed sta per S tream ED itor. È un comando Linux utilizzato per cercare, trovare e sostituire o inserire ed eliminare parole e righe in un file di testo.
Il caso d'uso più comune del comando Sed è trovare e sostituire le stringhe nei file. Quando usi il comando Sed, puoi modificare i file senza aprirli.
Questo articolo spiegherà i dettagli dell'utilizzo del comando Sed per trovare e sostituire le stringhe nei file.
Tutti gli esempi in questo tutorial sono stati eseguiti su Ubuntu 20.04.
Trova e sostituisci
Per impostazione predefinita, Sed è installato nella maggior parte delle distribuzioni Linux. Puoi verificare l'installazione di Sed sul tuo sistema Linux eseguendo:
$ sed --v
L'output sarà qualcosa del genere:
La sintassi di base dell'utilizzo del comando Sed per trovare e sostituire il testo è:
$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE
In cui:
-i:questa opzione consente di modificare i file del comando Sed invece di scrivere l'output nell'output standard.
s:sta per sostituto.
/ /:caratteri delimitatori.
g:è un flag sostitutivo globale.
FILE:Il file che vuoi manipolare con il comando Sed.
Si consiglia vivamente di mettere il modello di ricerca, il modello di sostituzione e altri argomenti tra virgolette.
Ad esempio, ecco un file di testo utilizzato per la dimostrazione:
567 Test test test
test /bin/zsh linuxways.net testbar 789
Per sostituire tutte le parole "test" con parole "linux", esegui il seguente comando:
$ sed -i 's/test/linux/g' test.txt
Uscita:
Se non utilizzi il flag g, viene sostituita solo la prima occorrenza del modello di ricerca in ogni riga:
$ sed -i 's/test/linux/' test.txt
Uscita:
Come puoi vedere, nell'esempio precedente, viene inserito anche il test della sottostringa all'interno della stringa della testbar. Se non vuoi sostituire una sottostringa nel modello di ricerca, mettiamo il modello di ricerca tra due limiti di parole \b:
$ sed -i 's/\btest\b/linux/g' test.txt
Uscita:
Per rendere il pattern di ricerca insensibile alle maiuscole e minuscole, utilizziamo il contrassegno I:
$ sed -i 's/test/linux/gI' test.txt
Uscita:
Nel mondo Linux, incontreremo molti casi d'uso che hanno i caratteri delimitatori nei file di testo. Dobbiamo usare la barra rovesciata \ per spezzare i caratteri delimitatori. Ad esempio, per sostituire /bin/zsh con /usr/bin/bash, eseguire:
$ sed -i 's/\/bin\/zsh/\/usr\/bin\/bash/g' test.txt
Uscita:
Trova e sostituisci ricorsivo
In molti casi, vuoi cercare ricorsivamente nelle directory i file che hanno una stringa specifica e sostituirla in tutti i file.
Ad esempio, il comando seguente cercherà e sostituirà la stringa "way" con "road" in tutti i file nella directory corrente.
$ find . -type f -exec sed -i 's/way/road/g' {} +
Se i nomi dei file contengono caratteri spazio, utilizziamo l'opzione -print0:
$ find . -type f -print0 | xargs -0 sed -i 's/way/road/g'
Per cercare e sostituire una stringa solo su file che hanno un'estensione specifica, eseguire:
$ find . -type f -name "*.java" -print0 | xargs -0 sed -i 's/way/road/g'
Conclusione
Hai esaminato alcuni esempi comuni di utilizzo del comando Sed. Cercare e sostituire una stringa di testo in un file con il comando Sed non è complicato come immagini.
In caso di dubbi, faccelo sapere nella sezione commenti.