如何在grep导致bash之前/之后获取行?

嗨,我很新的bash编程。 我想要一种在给定的文本中search的方法。 为此,我使用grep函数:

 grep -i "my_regex" 

这样可行。 但是考虑到这样的data

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

一旦我find了单词error (使用grep -i error data ),我希望find单词error之后的10行。 所以我的输出应该是:

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

有没有办法做到这一点?

比赛前后可以使用-B-A打印行。

 grep -i -B 10 'error' data 

比赛前将打印10条线,包括匹配线本身。

这样做的方法是靠近手册页的顶部

 grep -i -A 10 'error data' 

尝试这个:

 grep -i -A 10 "my_regex" 

-A 10表示匹配后打印十行到“my_regex”

在匹配行后打印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:~$ 

精确匹配的行和2行之前

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

grep精确匹配行和前后两行

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

参考: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.