GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare Sed per trovare e sostituire una stringa in un file

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 al sed 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.


Linux
  1. Come utilizzare Awk e le espressioni regolari per filtrare testo o stringhe nei file

  2. Usa il comando SED per trovare e sostituire la stringa nei file - Come eseguire questa attività su Ubuntu?

  3. trova il testo corrispondente e sostituisci la riga successiva

  4. Come usare sed per sostituire la variabile di un file di configurazione?

  5. Trova e sostituisci il testo in un file tra un intervallo di righe usando sed

File host Linux:come modificarlo e utilizzarlo?

Come trovare una stringa in un file su Linux

Come utilizzare il comando SED per trovare e sostituire la stringa nei file

Come trovare e sostituire testo, parola o stringa in un file

Come creare e utilizzare file di scambio su Linux

Come trovare e sostituire il testo in Vim