Bagaimana saya bisa memilih kejadian pertama antara dua pola termasuk mereka. Lebih disukai menggunakan sed
atau awk
.
Saya sudah:
text
something P1 something
content1
content2
something P2 something
text
something P1 something
content3
content4
something P2 something
text
Saya ingin kemunculan pertama garis antara P1 dan P2 (termasuk garis P1 dan garis P2):
something P1 something
content1
content2
something P2 something
sed
awk
regular-expression
kofucii
sumber
sumber
sed
... itu adalah bug yangsed
Anda jalankan, dan bukan dalam skrip di atas./P2/q
pada sistem saya; itu dia. Saya ingin tahu tentang sesuatu dan ingin membagikan apa yang saya temukan.dengan
awk
sumber
Di
sed
:-n
menekan pencetakan default, dan Anda mencetak garis di antara rentang alamat yang cocok menggunakanp
perintah.q
) ketika yang pertamaP2
cocok.Ini akan gagal jika ada yang
P2
datang sebelumnyaP1
. Untuk menangani kasus itu, cobalah:sumber
Jika Anda ingin melewati pola sendiri, ini
awk
versinya:sumber
awk
Solusi yang lebih sederhana (semacam setengah antara jawaban iruvar dan jawaban muru , tetapi tidak menggunakan variabel):dan, seperti yang dicatat muru, jika P2 pertama muncul sebelum P1 pertama, ini tidak akan mencetak apa pun.
Tentu saja, jika Anda ingin mencetak semua rentang P1-P2:
biarkan
exit
bagian:sumber
Keluar segera setelah dicetak, bukan sebelumnya.
sumber
Untuk melewati pola itu sendiri, dan hanya menampilkan blok pencocokan pertama dalam sed GNU tunggal:
sumber