Il sed sta per editor di streaming. Legge il file dato, modificando l'input come specificato da un elenco di comandi sed.
Per impostazione predefinita, l'input viene scritto sullo schermo, ma puoi forzare l'aggiornamento del file.
Il comando Sed (Stream EDitor) Linux viene 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.
Qui a LinuxAPT, come parte dei nostri servizi di gestione dei server, aiutiamo regolarmente i nostri clienti a eseguire query relative ai server Linux.
In questo contesto, esamineremo come utilizzare il comando Sed per trovare e sostituire le stringhe nei file nel sistema Ubuntu 20.04.
Trova e sostituisci su Ubuntu
Per impostazione predefinita, Sed è installato nella maggior parte delle distribuzioni Linux. Puoi verificare l'installazione di Sed sul tuo sistema Linux eseguendo:
$ sed --v
La sintassi di base dell'utilizzo del comando Sed per trovare e sostituire il testo è:
$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE
Dove:
-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 linuxapt.com testbar 789
Per sostituire tutte le parole 'test' con parole 'linux', esegui il seguente comando:
$ sed -i 's/test/linux/g' test.txt
Se non usi il flag g, viene sostituita solo la prima occorrenza del modello di ricerca in ogni riga:
$ sed -i 's/test/linux/' test.txt
Per rendere il pattern di ricerca insensibile alle maiuscole, utilizziamo il flag I:
$ sed -i 's/test/linux/gI' test.txt
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
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 'apt' con 'road' in tutti i file nella directory corrente.
$ find . -type f -exec sed -i 's/apt/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/apt/road/g'