GNU/Linux >> Belajar Linux >  >> Linux

Cetak Garis Antara (dan Termasuk) Dua Pola?

Saya ingin mulai menangkap dari baris yang memiliki CK di akhir baris dan berhenti mengambil ketika baris memiliki D pada akhirnya. Saya mencoba grep "$CK" "$D" file..txt , tapi tidak berhasil.

Masukan:

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

Keluaran yang diinginkan:

gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D

Jawaban yang Diterima:

Anda lebih baik menggunakan awk atau sed

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

ATAU

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

Jika Anda bersikeras grep, inilah cara grep GNU

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

Disini

-P mengaktifkan perl-regexp

-z set pemisah garis ke NUL. Ini memaksa grep untuk melihat seluruh file sebagai satu baris

-o hanya mencetak yang cocok

(?s) mengaktifkan PCRE_DOTALL, jadi . menemukan karakter atau baris baru

N cocok dengan apa pun kecuali baris baru

.*? menemukan. dalam mode tidak serakah

(?<=..) adalah pernyataan melihat ke belakang

(?=..) adalah pernyataan pandangan ke depan


Linux
  1. Cetak Garis Antara (dan Tidak Termasuk) Dua Pola?

  2. perbedaan antara file perangkat dan driver perangkat

  3. grep pasang pola dan file

  1. Ekstrak Nilai Antara Dua Pola Pencarian Pada Baris Yang Sama?

  2. Cetak Konten File Tanpa Baris Pertama Dan Terakhir?

  3. Ekstrak Teks Antara Dua Baris Tertentu?

  1. Bagaimana Memilih Kejadian Pertama Antara Dua Pola Termasuk Mereka?

  2. Bagaimana Menghapus Baris Kosong Dari File (termasuk Tab Dan Spasi)?

  3. Membaca Pola Grep Dari File?