Bagaimana cara menghapus beberapa baris per kejadian dalam suatu file?

10

Katakanlah saya punya file baris 857835 ini, berisi hal-hal seperti ini:

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

Dan saya ingin menghapus semua kemunculan a1dan baris berikutnya ( rubbish1dan rubbish5dalam contoh ini). Bagaimana saya melakukannya?

Saya sudah mencoba tetapi grep 'a1' -v -A1tidak berhasil, dan skill saya tidak terlalu bagus:}

Google-fu saya belum dapat membantu saya saat ini, tolong bantu seseorang!

rayfoo
sumber

Jawaban:

15

Mencoba:

sed -e '/^a1$/,+1d' "filename"

Ini berarti dari / ^ a1 $ / ke baris berikutnya, hapus

^ Dan $ memastikan Anda cocok dengan seluruh baris, jadi a1 yang tersembunyi tidak akan cocok.

pindahkan
sumber
6
Anda mungkin ingin ^dan $dalam pertandingan itu, untuk memaksa pencocokan seluruh baris.
Jander
@ Jander: Tentu, diperbaiki
asoundmove
12

Berikut ini akan berfungsi pada non-GNU sed( ,+1sintaks alamat adalah ekstensi GNU):

sed -e '/^a1$/,/^/d' my_file >my_filtered_file

"Mulai dari baris yang bertuliskan 'a1', dan berakhir di baris berikutnya yang merupakan awal dari baris tersebut (yaitu baris berikutnya), hapus."

Ini jauh lebih tidak bisa diperluas daripada jawaban @ asoundmove, karena menghapus sejumlah baris yang berbeda akan menggunakan skrip yang sama sekali berbeda.

Jander
sumber