GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come salvare il modello abbinato in una variabile usando il comando "sed"?

Sto cercando di trovare uno schema usando sed comando in file.txt tra il primo char1 e char2 e quindi sostituirlo con string. come di seguito con echo esempio di modalità:

echo "This X is test Y. But X is not test Y." | sed 's/X[^Y]*Y/REPLACE/'

Inoltre ho bisogno di salvare il modello abbinato (come is test {<–spaces around is important} ) in una variabile.

Risposta accettata:

Ecco una singola chiamata di sed che scrive la riga modificata in stdout salvando allo stesso tempo il testo rimosso nella variabile shell var :

$ var=$(echo "This X is test Y. But X is not test Y." | sed -nr 'h;s/[^X]*X([^Y]*)Y.*/\1/;p;x;s/X[^Y]*Y/REPLACE/;w /dev/stderr') 2>&1
This REPLACE. But X is not test Y.

Il valore di var è:

$ echo "==$var=="
== is test ==

Spiegazione:

  • h

    Questo comando copia il pattern corrente nello spazio di attesa.

  • s/[^X]*X([^Y]*)Y.*/\1/;p

    Questo rimuove tutto dallo spazio del modello tranne il testo tra la prima X e Y compresi eventuali spazi. Questo viene quindi stampato su stdout. Questo è l'output che viene catturato dalla shell e assegnato a var .

  • x

    Questo copia lo spazio di attesa nello spazio del modello. Al termine, lo spazio del modello contiene una copia della riga di input originale.

  • s/X[^Y]*Y/REPLACE/; w /dev/stderr

    La sostituzione viene effettuata e il risultato viene scritto in stderr .

  • 2>&1

    Dopo che la shell ha catturato stdout in var , questo indica alla shell di copiare stderr (che ha la riga con REPLACE) su stdout.

A parte la gestione della variabile var

La variabile var include gli spazi iniziali e finali. Se la shell dovesse successivamente assoggettare var alla divisione delle parole, questi spazi verrebbero rimossi. Per evitarlo, quando var è referenziato, fallo tra virgolette, come nell'esempio sopra.


Ubuntu
  1. Come assegnare l'output di un comando Linux a una variabile

  2. Come salvare l'output dei comandi in un file in Linux

  3. Come eseguire un comando memorizzato in una variabile?

  4. Come avviare Anydesk in Ubuntu usando il prompt dei comandi?

  5. Usando il comando cp nella shell linux, come posso copiare un'intera directory in un'altra directory?

Come riavviare Debian usando la riga di comando

Come creare un file in Linux usando Terminal

Come creare un file in Ubuntu Linux usando comando e GUI

Come aggiornare Ubuntu 16.04 LTS a 20.04 LTS usando il terminale di comando

Come copiare file in Linux usando il comando CP

Come usare il comando nmap