Sed regex sostituire

Sed regex sostituire

In Unix/Linux, SED è un comando dedicato per la modifica dei flussi. Questo è dove arriva il nome del comando (editor di stream). Prende un flusso come input, filtra e ne trasforma il contenuto e emette il risultato come indicato.

In questa guida, daremo uno sguardo all'utilizzo di SED con le espressioni regolari (regex in breve) per sostituire il contenuto in un file di testo. Questa guida utilizzerà la versione GNU/Linux di SED.

Afferrare un file di testo di esempio

A fini dimostrativi, creiamo un semplice file di testo con un po 'di testo per praticare i nostri comandi SED. Crea un file di testo usando Nano:

$ nano sed-pratice.TXT

All'interno del file, immettere il seguente testo:

#!/Bin/Bash
Echo "The Quick Brown Fox"
Echo "salta sopra il cane pigro"

Sostituzione di testi usando sed

La struttura di comando principale di SED per sostituire i testi è la seguente:

$ sed -i 's /// g'

Qui:

  • -I: Il comportamento predefinito di SED è scrivere l'output su stdout (output standard). Tuttavia, questo flag dice invece a SED di modificare i file. Se viene fornita anche un'estensione (ad esempio, -i.Bak), viene creato un backup del file originale.
  • S: indica sed per eseguire un'operazione sostitutiva sul flusso dato.
  • /: Il carattere delimitatore.
  • : Un'espressione regolare per il SED da abbinare al flusso dato.
  • : La stringa di sostituzione.
  • G: bandiera che istruisce sed per eseguire una sostituzione globale. Per impostazione predefinita, SED corrisponde e sostituisce solo la prima istanza.

Proviamolo. Nel seguente esempio, sostituiamo IL con IL Nella pratica sed.TXT:

$ sed -i 's/the/the/g' sed -practice.TXT

Verificare le modifiche.

$ cat sed-pratice.TXT

Come puoi vedere, abbiamo modificato correttamente il contenuto del file.

Lavorare con i personaggi delimitanti

Come descritto nella sezione precedente, le istruzioni SED sono dotate di caratteri delimitanti per separare le varie parti. Se vogliamo sostituire i testi che contengono il carattere delimitatore, dobbiamo usare la backslash (\) per sfuggirlo.

Diamo un'occhiata al seguente esempio:

$ sed -i 's/\/bin \/bash/\/usr \/bin \/zsh/g' sed -practice.TXT

Qui, sostituiamo/bin/bash con/usr/bin/zsh. Verifica se il tentativo ha successo.

$ cat sed-pratice.TXT

Usando questo modello a zig -zag di avanti e indietro, può facilmente diventare estremamente confuso. Ecco perché è una pratica comune usare altri delimitatori come il colon (:) o barra verticale (|). Riscriviamo il comando usando la barra verticale come delimitatore:

$ sed -i 's |/usr/bin/zsh |/bin/bash | g' sed -practice.TXT

Set di caratteri regex

Possiamo usare i set di caratteri per descrivere una serie di caratteri da sostituire in SED. Ecco alcuni set di caratteri comuni che incontrerai:

  • [A-Z]: tutti gli alfabeti minuscoli.
  • [A-Z]: tutti gli alfabeti maiuscoli.
  • [0-9]: tutte le cifre.

Nel seguente esempio, sostituiamo tutte le cifre con l'alfabeto. Dai un'occhiata al seguente esempio:

$ echo 1001001 | sed -e 's | [0-9] | k | g'

Qui, SED sostituisce tutte le cifre (1 e 0, in questo caso) trova con la lettera K.

E se vogliamo sostituire 1 con A e 0 con B? Ecco un modo per raggiungere questo obiettivo:

$ echo 1001001 | sed -e 's | 1 | a | g' | sed -e 's | 0 | b | g'

Qui, il primo comando SED sostituisce 1 con a. L'uscita viene quindi condotta a un secondo comando sed che sostituisce 0 con b.

Conclusione

In questa guida, abbiamo dimostrato brevemente i vari modi di usare SED per trovare e sostituire i testi. Con l'aiuto di Regex, siamo stati in grado di perfezionare la ricerca e sostituire il contenuto esatto. Ulteriori informazioni su Sed Regex.

Con l'aiuto di alcuni strumenti aggiuntivi come Find, possiamo usare SED per modificare anche i file di un'intera directory.

Possiamo anche implementare SED negli script bash per eseguire un editing più complesso di flusso. Ulteriori informazioni sul viaggio di partenza con Bash Scripting.