GNU/Linux >> Linux Esercitazione >  >> Linux

Come usare sed per rimuovere solo le doppie righe vuote?

Ho commentato il sed comando che non capisci:

sed '
    ## In first line: append second line with a newline character between them.
    1N;
    ## Do the same with third line.
    N;
    ## When found three consecutive blank lines, delete them. 
    ## Here there are two newlines but you have to count one more deleted with last "D" command.
    /^\n\n$/d;
    ## The combo "P+D+N" simulates a FIFO, "P+D" prints and deletes from one side while "N" appends
    ## a line from the other side.
    P;
    D
'

Rimuovi 1N perché ci servono solo due righe nello 'stack' ed è sufficiente con il secondo N e cambia /^\n\n$/d; a /^\n$/d; per eliminare tutte e due le righe vuote consecutive.

Un test:

Contenuto di infile :

1


2
3

4



5

6


7

Esegui il sed comando:

sed '
    N;
    /^\n$/d;
    P;
    D
' infile

Ciò produce:

1
2
3

4

5

6
7

Questo sarebbe più facile con awk :

awk -v RS='\n\n\n' 1

Questo sarebbe più facile con cat :

cat -s

sed '/^$/{N;/^\n$/d;}'

Eliminerà solo due righe vuote consecutive in un file. Puoi usare questa espressione solo nel file, quindi solo tu puoi comprenderla appieno. Quando arriverà una riga vuota che entrerà tra parentesi graffe.

Normalmente sed leggerà una riga. N aggiungerà la seconda riga allo spazio del modello. Se quella riga è una riga vuota. le due righe sono separate da newline.

/^\n$/ questo schema corrisponderà a quella volta solo al d funzionerà. Altrimenti d non funziona. d viene utilizzato per eliminare l'intero contenuto dello spazio modello, quindi avviare il ciclo successivo.


Linux
  1. Con il comando "cat" di Linux, come mostrare solo determinate righe per numero?

  2. Rimuovere la riga contenente una determinata stringa e la riga seguente?

  3. Elimina le righe vuote usando sed

  4. Come rimuovere il carattere \r con sed

  5. sed - inserisce riga dopo X righe dopo la corrispondenza

Come utilizzare il proxy sulla riga di comando di Linux?

Come rimuovere le righe da un file usando il comando Sed

Come eliminare le righe vuote nei file utilizzando Grep, Sed e Awk

Come trovare le righe più lunghe in un file in Linux

COME USARE SED EDITOR

Come eliminare più righe in Vim