Bir dosyada tekrar başına birden çok satır nasıl kaldırılır?


11

Diyelim ki böyle şeyler içeren bu 857835 satır dosyası var:

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

Ve a1sonraki satırın tüm oluşumlarını ( rubbish1ve rubbish5bu örnekte) kaldırmak istiyorum . Nasıl yaparım?

Ben grep 'a1' -v -A1boşuna denedim ve benim sed skillz gerçekten harika değil:}

Google-fu'm bu sefer bana yardım edemedi, lütfen biri yardım edin!

Yanıtlar:


16

Deneyin:

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

Bu, / ^ a1 $ / ifadesinden sonraki satıra, silme

^ Ve $ tüm satırı eşleştirdiğinizden emin olur, böylece gizli bir a1 eşleşmez.


6
Sen isteyebilirsin ^ve $o maçta, eşleştirme bütün çizgiler zorlamak için.
Jander

@Jander: Elbette, düzeltildi
asoundmove

12

GNU olmayanlar için aşağıdakiler çalışır sed( ,+1adres sözdizimi bir GNU oluşumudur):

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

"Tam olarak 'a1' yazan bir satırdan başlayarak, satırın başlangıcının bulunduğu bir sonraki satırdan (yani bir sonraki satırdan) sonra silin."

@ Asoundmove'un cevabından çok daha az genişletilebilir, çünkü farklı sayıda satırı silmek tamamen farklı bir senaryo gerektirecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.