Comando sed per eliminare una riga

Comando sed per eliminare una riga
SED è uno strumento Linux integrato per la manipolazione del testo. Il termine Sed rappresenta Editor di streaming. Nonostante il nome, SED non è un editor di testo da solo. Piuttosto, prende il testo come input, esegue varie modifiche del testo in base alle istruzioni e stampare l'uscita.

Questa guida dimostrerà come utilizzare sed per eliminare una riga da un testo.

Sed su Linux

Il nome completo di SED ci dà un suggerimento al suo metodo di lavoro. Sed prende il testo di input come un flusso. Il testo può provenire da qualsiasi luogo: un file di testo o un output standard (stdout). Dopo aver preso l'input, SED funziona su la riga per linea.

Per dimostrazione, ecco un semplice file di testo che ho generato.

$ gatto fittizio.TXT
1. IL
2. presto
3. marrone
4. Volpe
5. salti
6. Sopra
7. IL
8. Pigro
9. cane

Eliminazione della linea usando SED

Per eliminare una riga, useremo il comando "D". Nota che devi dichiarare quale linea elimina. Altrimenti, SED eliminerà tutte le linee.

Elimina una riga singola

Il seguente comando SED eliminerà la prima riga del testo.

Dummy Sed '1D'.TXT

Fondamentalmente, per eliminare una linea, è necessario il numero di linea della linea di destinazione. Rimuoviamo la linea 5.

Dummy Sed '5D'.TXT

Per eliminare l'ultima riga del file di testo, invece di calcolare manualmente il numero di riga, usa invece "$".

sed '$ d' fittizio.TXT

Elimina una gamma di linee

SED può eliminare una gamma di linee. Qui, il valore minimo della linea è 1 e il valore massimo della linea è 5. Per dichiarare l'intervallo, stiamo usando la virgola (,).

manichino sed '1,5d'.TXT

Elimina più righe

E se le linee che desideri rimuovere non sono in un intervallo fisso? Dai un'occhiata al seguente comando SED. Nota che stiamo usando un punto e virgola (;) come delimitatore. Essenzialmente, ogni opzione delimitata è un comando SED separato.

sed '1d; 2d; 3d; $ d' fittizio.TXT

Elimina tutte le righe tranne l'intervallo specificato

Nel prossimo esempio, SED manterrà solo le linee descritte dall'intervallo. Qui, "!"È l'operatore di negazione, dire a SED di mantenere le linee specifiche.

Sed '2,4!D 'Dummy.TXT

Elimina linee vuote

Se ci sono più righe vuote o vuote nel testo, il seguente comando SED li rimuoverà tutti.

sed '/^$/d' Dummy.TXT

Elimina le linee in base al modello

Sed può cercare un modello particolare ed eseguire le azioni specificate sulla linea. Possiamo usare questa funzione per eliminare righe specifiche che corrispondono a uno schema.

Diamo un'occhiata alla seguente dimostrazione. Sed rimuoverà qualsiasi riga che contiene la stringa "la".

Dummy sed '/the/d'.TXT

Possiamo anche descrivere più stringhe da cercare. Ogni stringa è delimitata usando il simbolo "\ |".

Sed '/Brown \ | the/d' Dummy.TXT

Elimina le linee che iniziano con un carattere specifico

Per indicare l'avvio di una linea, useremo il simbolo di caret (^).

Il seguente comando SED rimuoverà tutte le righe che iniziano con una cifra. Qui, il gruppo di personaggi “[: Digit:]” descrive tutte le cifre (0-9).

Sed '/^[[: Digit:]]/D' Dummy.TXT

Possiamo anche descrivere più caratteri per una corrispondenza valida. L'esempio seguente corrisponderà a tutte le righe che iniziano con "T" e "B".

sed '/^[tb]/d' fittizio.TXT

Nell'esempio successivo, dai un'occhiata a come rimuovere tutte le linee che iniziano con un carattere maiuscola. Qui, stiamo usando il gruppo di personaggi maiuscole "[: Upper:]".

Sed '/^[[: Upper:]]/D' Dummy.TXT

Se le linee target hanno caratteri minuscolati all'inizio, utilizzare il gruppo di caratteri minuscoli “[: inferiore:]”.

sed '/^[[: inferiore:]]/d' Dummy.TXT

Elimina le linee che terminano con carattere specifico

Per indicare la fine di una linea, possiamo usare il simbolo "$". Descrive la corrispondenza con l'ultima occorrenza del modello.

Nel prossimo esempio, SED eliminerà le linee che terminano con "E".

fittizio sed '/e $/d'.TXT

Proviamo con una ricerca a più carattere.

sed '/[en] $/d' fittizio.TXT

Eliminazione di linee che corrispondono al modello e alla riga successiva

Abbiamo già dimostrato come eliminare una riga se un modello corrisponde. Possiamo anche estendere ed eliminare anche la linea successiva.

Dai un'occhiata al seguente comando SED.

sed '/the/n; d;' Dummy.TXT

Sed corrisponderà alla linea che contiene "la" ed eliminerà anche la linea successiva.

Eliminazione della linea dalla corrispondenza del modello fino alla fine

Possiamo estendere ulteriormente l'esempio precedente per ordinare sed per eliminare tutte le linee, a partire dalla prima partita del modello.

sed '/fox/, $ d' fittizio.TXT

Qui, SED eliminerà la linea che corrisponde al modello "prima" e tutte le linee in seguito.

Pensiero finale

Sed è uno strumento semplice. Tuttavia, può fare miracoli, grazie al supporto per l'espressione regolare. SED si integra anche perfettamente in vari script.

Questa era solo una breve guida che dimostrava una delle funzioni SED - Eliminazione delle linee. Ci sono tonnellate di altre cose che puoi fare con SED. Ad esempio, dai un'occhiata a questa mega guida su 50 esempi. È una guida fantastica che copre tutte le basi e molte implementazioni SED avanzate.