Pertanyaan Bagaimana cara mengambil garis sebelum / sesudah hasil grep di bash?


Hai, saya sangat baru untuk bash programming. Saya ingin cara mencari dalam Teks yang diberikan. Untuk itu saya gunakan grep fungsi:

grep -i "my_regex"

Itu bekerja. Tetapi mengingat data seperti ini :

This is the test data
This is the error data as follows
. . . 
. . . .
. . . . . . 
. . . . . . . . .
Error data ends

Begitu saya menemukan kata itu error (menggunakan grep -i error data), Saya ingin menemukan 10 baris yang mengikuti kata tersebut error. Jadi output saya harus:

    . . . 
    . . . .
    . . . . . . 
    . . . . . . . . .
    Error data ends

Apakah ada cara untuk melakukannya?


75
2017-09-16 06:15


asal


Jawaban:


Anda dapat menggunakan -B dan -A untuk mencetak garis sebelum dan sesudah pertandingan.

grep -i -B 10 'error' data

Akan mencetak 10 baris sebelum pertandingan, termasuk garis yang cocok itu sendiri.


153
2017-09-16 06:16



Cara melakukannya adalah di dekat bagian atas halaman manual

grep -i -A 10 'error data'

8
2017-09-16 06:17



Ini mencetak 10 baris trailing context setelah garis yang cocok

grep -i "my_regex" -A 10

Jika Anda perlu mencetak 10 baris konteks utama sebelum mencocokkan garis,

grep -i "my_regex" -B 10

Dan jika Anda perlu mencetak 10 baris konteks output leading dan trailing.

grep -i "my_regex" -C 10

Contoh

user@box:~$ cat out 
line 1
line 2
line 3
line 4
line 5 my_regex
line 6
line 7
line 8
line 9
user@box:~$

Grep normal

user@box:~$ grep my_regex out 
line 5 my_regex
user@box:~$ 

Garis pencocokan tepat Grep dan 2 baris sesudahnya

user@box:~$ grep -A 2 my_regex out   
line 5 my_regex
line 6
line 7
user@box:~$ 

Garis pencocokan tepat Grep dan 2 baris sebelumnya

user@box:~$ grep -B 2 my_regex out  
line 3
line 4
line 5 my_regex
user@box:~$ 

Garis pencocokan tepat Grep dan 2 baris sebelum dan sesudah

user@box:~$ grep -C 2 my_regex out  
line 3
line 4
line 5 my_regex
line 6
line 7
user@box:~$ 

Referensi: manpage grep

-A num
--after-context=num

    Print num lines of trailing context after matching lines.
-B num
--before-context=num

    Print num lines of leading context before matching lines.
-C num
-num
--context=num

    Print num lines of leading and trailing output context.

8
2017-07-12 08:12



Coba ini:

grep -i -A 10 "my_regex"

-A 10 berarti, cetak sepuluh baris setelah cocok dengan "my_regex"


5
2017-09-16 06:17