Qual è l'opzione G in sed

Qual è l'opzione G in sed

"Il termine sed è un'abbreviazione di Editor di streaming. In unix/linux, il sed Comando analizza e trasforma i flussi (testi, nella maggior parte dei casi). È uno strumento di riga di comando che viene preinstallato in ogni sistema UNIX/Linux."

In questa guida, esploreremo il G opzione in sed.

Uso di base di SED

L'uso più comune del comando SED è trovare e sostituire i contenuti in un determinato flusso. La struttura di comando è la seguente:

$ sed 's ///'


Dai un'occhiata al seguente esempio:

$ echo "The Quick Brown Fox" | sed 's/the/the/'



Qui,

    • IL eco Il comando stampa la stringa data su Stdout. In Bash, Stdout, stdin e stderr sono flussi di dati integrati.
    • IL sed usi del comando Stdout Come flusso, opera come specificato e stampare l'uscita sulla console.

Se stai cercando di modificare un file di testo, SED non modificherà il contenuto del file per impostazione predefinita. Questo per evitare perdita di dati accidentali. Per modificare direttamente il contenuto di un file, è necessario eseguire SED con l'editing sul posto.

L'opzione G in sed

Quando si trova e si sostituisce, il comportamento predefinito di sed è interrompere le sue azioni dopo aver trovato la prima istanza. Il seguente esempio dimostra perfettamente questo comportamento:

$ echo "The the" | sed 's/the/the/'



Qui,

    • Usando il eco comando, stiamo passando la stessa parola "la" più volte al sed comando.
    • Tuttavia, nell'output, solo la prima istanza di "The" viene trasformata in "The".

Per istruire SED di trasformare tutte le istanze di corrispondenza del modello dato, dobbiamo aggiungere l'opzione G. Aggiorna il comando come segue:

$ echo "The the" | sed 's/the/the/g'



Ora, tutti i casi di "The" sono cambiati in "il" correttamente.

L'opzione G in sed

Finalmente arriviamo al punto di messa a fuoco di questa guida. Mentre il G L'opzione è applicabile per la sostituzione del testo, il G l'opzione viene utilizzata per uno scopo completamente diverso.

Usando il G Opzione, possiamo aggiungere spazio allo spazio dei pattern. In termini semplici, possiamo aggiungere nuove righe prima/dopo il modello di abbinamento.

Per dimostrazione, ho creato un file di testo di esempio test.TXT:

gatto << EOF > test.TXT
IL
presto
marrone
IL
Volpe
Eof


Spaziatura aggiuntiva

Ora possiamo eseguire varie operazioni sulla spaziatura del file. Ad esempio, per raddoppiare il file, utilizzare il comando seguente:

$ sed g test.TXT



Allo stesso modo, possiamo triplicare spazio nel file:

test $ sed 'g; g'.TXT



Qui,

    • In entrambi i casi, perché non stiamo fornendo alcun modello da abbinare, sed è corrispondente a tutti i testi nel file.
    • IL sed comando opere riga per riga su un determinato flusso di testo. Dopo aver abbinato ogni riga (perché non è stato fornito alcun modello specifico), viene aggiunta una nuova linea.

Rimozione della spaziatura aggiuntiva

Possiamo anche usare il G Opzione per eliminare tutte le righe vuote e il doppio spazio:

test $ sed 'g; g'.txt | sed '/^$/d; g'

Inserimento di righe vuote prima/dopo le partite

Possiamo specificare uno schema usando l'espressione regolare e dire a SED di aggiungere una riga vuota prima/dopo essa.

Il primo esempio sarà l'aggiunta di una riga vuota sotto il modello di corrispondenza:

Test $ sed '/the/g'.TXT



Il prossimo esempio sarà l'aggiunta di una riga vuota sopra il modello di corrispondenza:

$ sed '/the/x; p; x;' test.TXT



Infine, possiamo combinarli entrambi per inserire linee vuote attorno al modello di abbinamento:

$ sed '/the/x; p; x; g;' Test.TXT


Pensieri finali

In questa guida, abbiamo dimostrato con successo vari modi per utilizzare il G opzione con sed Per aggiungere spazi nel testo. Questa tecnica può essere utile in varie situazioni, ad esempio, individuando linee specifiche in un registro di debug.

Un enorme vantaggio di SED è il suo supporto per espressione regolare. Ulteriori informazioni su SED con Regex. Il comando SED può anche essere facilmente integrato nello script di shell.

Felice calcolo!