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.