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