bagaimana cara grep dan mencetak garis N berikutnya setelah hit?

16

Saya ingin melihat kejadian dalam file teks, kemudian mencetak baris N berikut setelah setiap kejadian ditemukan. Ada ide?

719016
sumber

Jawaban:

23

Grep memiliki opsi berikut yang akan memungkinkan Anda melakukan ini (dan hal-hal seperti itu). Anda mungkin ingin melihat halaman manual untuk informasi lebih lanjut:

  • -A num Cetak baris num konteks tertinggal setelah setiap pertandingan. Lihat juga opsi -B dan -C.

  • -B num Cetak baris num konteks terkemuka sebelum setiap pertandingan. Lihat juga opsi -A dan -C.

  • -C [num] Cetak baris num dari konteks terkemuka dan tertinggal di sekitar setiap pertandingan. Standarnya adalah 2 dan setara dengan -A 2 -B 2. Catatan: spasi tidak boleh diberikan antara opsi dan argumennya.

Colin K
sumber
7

Jika Anda memiliki GNU grep, itu adalah opsi -A/ --after-context. Kalau tidak, Anda bisa melakukannya dengan awk.

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename
geekosaurus
sumber
1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- bekerja, milikmu tidak.
BladeMight
4

Gunakan -Aargumen untuk grepmenentukan berapa banyak baris di luar pencocokan dengan output.

Ignacio Vazquez-Abrams
sumber
3

Cetak garis N setelah garis yang cocok

Anda dapat menggunakan grepdengan -A npilihan untuk mencetak N baris setelah baris yang cocok.

Sebagai contoh:

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

Opsi terkait lainnya:

Cetak N baris sebelum mencocokkan garis

Menggunakan -B nopsi Anda dapat mencetak garis N sebelum mencocokkan garis.

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

Cetak garis N sebelum dan sesudah garis yang cocok

Menggunakan -C nopsi, Anda dapat mencetak garis N sebelum dan sesudah garis yang cocok.

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
pengguna1336087
sumber