Saya mencari untuk menampilkan baris 4598 di file berikut. Secara efektif saya ingin menampilkan garis SETELAH terjadinya pertandingan. Dalam hal ini, garis setelah kemunculan ke - 3 dari <Car>
. Bagaimana saya melakukannya?
<Car>
10456
</Car>
<Car>
70192
</Car>
<Car>
4598
</Car>
sed
,awk
atau bahkangrep
, itu dianjurkan untuk menggunakan parser XML.Jawaban:
Atau:
Untuk meneruskan pola pencarian sebagai variabel:
Di sini menggunakan
ENVIRON
alih-alih-v
sebagai-v
memperluas urutan backslash-escape dan backslash sering ditemukan dalam ekspresi reguler (jadi perlu digandakan dengan-v
).GNU
awk
4.2 atau lebih baru memungkinkan Anda menetapkan variabel sebagai regexps yang diketik dengan kuat . Selama mode POSIX-nya tidak diaktifkan (misalnya melalui$POSIXLY_CORRECT
variabel lingkungan, Anda dapat melakukan:sumber
Inilah perl satu:
Dengan GNU
grep
, Anda juga dapat menguraikan hasilnya seperti:Dari
man grep
:sumber
Dengan
GNU awk
Anda dapat melakukan:sumber
Inilah cara lain dengan
sed
:Ini menggunakan ruang tunggu untuk menghitung.
Setiap kali bertemu garis yang cocok
<Car>
itu, iax
mengubah buffer dan memeriksa apakah ada persis N-1 kejadian karakter dalam buffer terus. Jika centang berhasil, maka iax
berubah lagi, dan jika tidak pada baris terakhir, ia menarikn
garis ext danp
mematahkan ruang pola laluq
menggunakan. Kalau tidak, itu hanya menambahkan.
karakter lain ke ruang penahanan danx
perubahan e kembali.sumber
Inilah solusi baris perintah sederhana.
Jika Anda mengubah nilai +3 setelahnya
tail
, Anda dapat menentukan baris ke-n apa saja.sumber