Ada skrip (sebut saja echoer
) yang mencetak untuk menyaring banyak informasi. Saya ingin hanya dapat melihat garis setelah pola ditemukan.
Saya membayangkan penggunaan solusi untuk terlihat seperti
echoer | solution_command <pattern>
Idealnya pattern
akan menjadi ekspresi reguler, tetapi string nilai keras akan cukup bagi saya.
Jawaban:
AWK dapat melakukan ini dengan rentang pola, yang memungkinkan penggunaan ekspresi reguler apa pun:
akan mencetak
echoer
hasil mulai dengan pencocokan baris pertamapattern
.AWK berbasis pola, dan biasanya digunakan dengan tipe pendekatan "jika pola ini cocok, lakukan ini". "Pola ini" dapat berupa rentang pola, yang didefinisikan sebagai "ketika pola ini cocok, mulailah melakukan ini, hingga pola ini cocok"; ini ditentukan dengan menulis dua pola yang dipisahkan oleh koma, seperti di atas. Pola dapat berupa kecocokan teks, seperti di
/pattern/
, di mana garis saat ini diperiksa terhadap pola, ditafsirkan sebagai ekspresi reguler; mereka juga bisa menjadi ekspresi umum, dievaluasi untuk setiap baris, dan dianggap cocok jika hasilnya tidak nol atau tidak kosong.Di AWK, tindakan default adalah mencetak baris saat ini.
Menyatukan semua ini,
awk '/pattern/,0'
mencari garis yang cocokpattern
, dan setelah menemukannya, menerapkan tindakan default untuk semua baris sampai0
kondisinya cocok (tidak nol).awk '/pattern/,""'
akan bekerja juga.The pengguna melongo masuk ke lebih detail.
sumber
0
? Apakah akan/pattern/,/0/
? Seperti apa jawabannya bila secara eksplisit menuliskan tindakan default?/pattern/,/0/
akan mencetak sampai menemukan garis (catatan) yang mengandung "0". Menulis cuplikan dalam jawaban dengan tindakan eksplisit memberi/pattern/,0 { print $0 }
, atau setara/pattern/,0 { print }
.Wajib
sed
setara @ StephenKitt iniawk
satu:pattern
ada ditafsirkan sebagai Ekspresi Reguler Dasar seperti dalamgrep
(sebagai lawan dari Ekspresi Reguler Diperpanjang diawk
/egrep
/grep -E
). Beberapased
implementasi memiliki opsi-E
(BSD, ast, GNU / busybox baru-baru ini, segera POSIX) atau-r
(GNU, ssed, busybox, beberapa BSD baru-baru ini) untuk menjadikannya sebagai Extended Regular Expressions, dan beberapa memiliki-P
(ast) atau-R
(ssed) untuk membuatnya ekspresi reguler seperti perl.Dengan
perl
:sumber
dengan GNU dan * BSD grep:
Kecuali jika file Anda memiliki lebih dari 1 juta baris, itu saja.
sumber
Jika Anda menggunakan pager seperti
less
untuk melihat output dari perintahsumber
awk
untuk garis setelah (tetapi tidak termasuk) pencocokan pola pertamaJika garis yang mengandung pola pemicu setara dengan "CUT HERE", Anda dapat menghilangkannya dari hasil cetak:
Setiap jalur input dijalankan melalui dua komponen dalam kode awk. Komponen pertama adalah
flag
, yang menafsirkan sebagai "cetak baris jika variabelnyaflag
bukan nol". Karena variabel awk adalah 0 secara default, ini awalnya tidak akan mencetak apa pun.Komponen kedua
/pattern/ { flag=1 }
,, mengatur bendera ke 1 segera setelah mendeteksi pola, dan bendera mempertahankan nilai itu selama sisa proses.Pada saat pola terdeteksi pertama kali, peluang untuk mencetak jalur input telah terlewati. Setiap baris berikutnya (termasuk garis tambahan yang mengandung pola) akan dicetak.
sumber
Pesta
Agak kikuk, tetapi berhasil.
Versi ini bergantung
cat
, tetapi lebih mudah dipahami.sumber