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!

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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.