İki desen arasında (ve dahil) çizgiler yazdırın


16

Hattın CKsonunda olan hatlardan açgözlülükle başlamak ve hat sonunda olduğunda açgözlülüğü durdurmak istiyorum D. Denedim grep "$CK" "$D" file..txtama işe yaramadı.

Giriş:

kkkkkkkkkkk   
jjjjjjjjjjjjjjjjjj  
gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D  
GGGGGGGGGGGGGG  
GGGGGGGGGGGGGG

İstenen çıktı:

gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D

Yanıtlar:


21

Sen veya kullanarak daha iyi

awk '/CK$/,/D$/' file.txt

VEYA

sed -n '/CK$/,/D$/p' file.txt

Eğer ısrar ediyorsanız , işte bir GNU grep yolu

grep -oPz '(?s)(?<=\n)\N+CK\n.*?D(?=\n)' file.txt

Buraya

-P perl-regexp'yi etkinleştirir

-zhat ayırıcıyı NUL olarak ayarlar. Bu, grep'i dosyanın tamamını tek bir satır olarak görmeye zorlar

-o sadece eşleşen baskılar

(?s)PCRE_DOTALL'ı etkinleştirir, bu nedenle .herhangi bir karakter veya yeni satır bulur

\N newline dışında herhangi bir şeyle eşleşir

.*?bulur. gereksiz modda

(?<=..) geriye dönük bir iddia

(?=..) ileriye dönük bir iddia


neden eğik çizgi eklenmedi? böyleawk '/\/CK/,/\/D/' input
Rahul Patil

@RahulPatil, çünkü OP, 'satırın sonunda "CK" olan satırlardan selamlamaya başlayın ve satır "D" olduğunda
selamlamayı bırakın

bana öyle geliyor ki, regex hakkında güçlü bir anlayışa sahipsin .. Bu seviyeyi anlamadım, bu yüzden PCRE grep'in sonuncusunu açıklayabilir misin
Rahul Patil

@RahulPatil, bazı açıklamalar ekledi :-)
iruvar

@RohitPatil, eşleşen seçimi dosyadan silmek istiyorum. bunu yapabilir miyim?
Rana Khan

0

BSD kullanıyorsanız grep(perl regex parametresini desteklemiyorsa -P), işte geçici çözüm:

grep -o "aaa.*cdn" <(paste -sd_ file) | tr '_' '\n'

Bu, tüm satırları birleştirerek çalışır (yeni satırları _ karakterle ), tek satır desenini kontrol ederek ve satırları orijinal durumuna geri genişleterek çalışır.

GNU kullanıyorsanız grep, çok satırlı eşleşme elde edebilirsiniz grep, ancak başka bir cevapta belirtildiği gibi grep( -P) için perl-regexp kullanmanız gerekir . Yine de GNU'yu macOS'a kurabilir ve kullanabilirsiniz .grepbrew install grepggrep


Alternatif olarak pcregrep, çok çizgili desenleri ( -M) destekleyen kullanabilirsiniz .


exKomutu da kullanabilirsiniz , örneğin:

ex +"/aaa/;/cdn/p" -scq! file
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.