问题描述
嗨,我是bash编程的新手。我想要一种在给定文本中搜索的方法。为此,我使用grep
函数:
grep -i "my_regex"
这样可行。但是鉴于这样的data
:
This is the test data
This is the error data as follows
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
一旦找到单词error
(使用grep -i error data
),我希望找到单词error
之后的10行。所以我的输出应该是:
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
有什么办法吗?
最佳回答
您可以使用-B
和-A
在比赛前后打印行。
grep -i -B 10 'error' data
将在匹配之前打印10行,包括匹配行本身。
次佳回答
匹配行后将打印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:~$
参考: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.
第三种回答
这样做的方法是在手册页顶部附近
grep -i -A 10 'error data'
第四种回答
尝试这个:
grep -i -A 10 "my_regex"
-A 10表示与”my_regex”匹配后打印十行