web-dev-qa-db-ja.com

grepの結果がbashになる前後に行を取得するにはどうすればよいですか?

こんにちは、bashプログラミングは初めてです。特定のテキストを検索する方法が必要です。そのためにgrep関数を使用します。

grep -i "my_regex"

動作します。しかし、このようなdataが与えられた場合:

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

grep -i error dataを使用して)Word errorを見つけたら、Word errorに続く10行を見つけたいと思います。したがって、私の出力は次のようになります。

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

それを行う方法はありますか?

115
sriram

-Bおよび-Aを使用して、一致の前後に行を印刷できます。

grep -i -B 10 'error' data

一致する行自体を含む、一致する前の10行を印刷します。

214
Jon Lin

これは、一致する行の後に10行の後続コンテキストを出力します

grep -i "my_regex" -A 10

行を照合する前に先頭のコンテキストを10行印刷する必要がある場合、

grep -i "my_regex" -B 10

また、10行の先頭および末尾の出力コンテキストを印刷する必要がある場合。

grep -i "my_regex" -C 10

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

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

Grep完全一致行と2行後

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

Grep完全一致行と2行前

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

Grep完全一致行と前後の2行

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

参照:マンページ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.
18

これを行う方法は、manページの上部にあります

grep -i -A 10 'error data'
9
Ray Toal

これを試して:

grep -i -A 10 "my_regex"

-A 10は、「my_regex」との一致後に10行を印刷することを意味します

6