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.