GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menggunakan sed untuk menghapus hanya dua baris kosong?

Saya telah mengomentari sed perintah yang tidak Anda mengerti:

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
'

Hapus 1N karena kita hanya membutuhkan dua baris di 'stack' dan itu cukup dengan N kedua , dan ubah /^\n\n$/d; ke /^\n$/d; untuk menghapus semua dua baris kosong yang berurutan.

Ujian:

Konten infile :

1


2
3

4



5

6


7

Jalankan sed perintah:

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

Itu menghasilkan:

1
2
3

4

5

6
7

Ini akan lebih mudah dengan awk :

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

Ini akan lebih mudah dengan cat :

cat -s

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

Ini hanya akan menghapus dua baris kosong berturut-turut dalam sebuah file. Anda dapat menggunakan ungkapan ini hanya dalam file maka hanya Anda yang dapat sepenuhnya mengerti. Ketika baris kosong akan muncul, itu akan masuk ke dalam kurung kurawal.

Biasanya sed akan membaca satu baris. N akan menambahkan baris kedua ke ruang pola. Jika baris itu adalah baris kosong. kedua baris dipisahkan oleh baris baru.

/^\n$/ pola ini akan cocok dengan waktu itu hanya d akan bekerja. Lain d tidak bekerja. d digunakan untuk menghapus seluruh konten ruang pola lalu memulai siklus berikutnya.


Linux
  1. sed untuk memasukkan hanya pada pertandingan pertama

  2. Cara menggunakan sed untuk menghapus n baris terakhir dari sebuah file

  3. Hapus baris kosong menggunakan sed

  1. Cara menghapus \r karakter dengan sed

  2. sed - menyisipkan baris setelah baris X setelah pertandingan

  3. cara menghapus tanda kutip ganda di csv

  1. Cara menggunakan perintah sed Linux

  2. Belajar menggunakan editor teks Sed

  3. Hapus Baris Yang Mengandung String Tertentu Dan Baris Berikut?