如何在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.