sri*_*ram 130 bash shell ubuntu
嗨,我很擅长bash编程.我想要一种在给定文本中搜索的方法.为此,我使用grep功能:
grep -i "my_regex"
Run Code Online (Sandbox Code Playgroud)
这样可行.但鉴于data这样:
This is the test data
This is the error data as follows
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Run Code Online (Sandbox Code Playgroud)
一旦我找到了单词error(使用grep -i error data),我希望找到跟随这个单词的10行error.所以我的输出应该是:
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?
Jon*_*Lin 236
您可以使用-B与-A前和比赛结束后印刷线条.
grep -i -B 10 'error' data
Run Code Online (Sandbox Code Playgroud)
将在匹配前打印10行,包括匹配行本身.
Cha*_*ell 25
这会在匹配行后打印10行尾随上下文
grep -i "my_regex" -A 10
Run Code Online (Sandbox Code Playgroud)
如果您需要在匹配行之前打印10行前导上下文,
grep -i "my_regex" -B 10
Run Code Online (Sandbox Code Playgroud)
如果您需要打印10行前导和尾随输出上下文.
grep -i "my_regex" -C 10
Run Code Online (Sandbox Code Playgroud)
例
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:~$
Run Code Online (Sandbox Code Playgroud)
正常的grep
user@box:~$ grep my_regex out
line 5 my_regex
user@box:~$
Run Code Online (Sandbox Code Playgroud)
Grep完全匹配的行和2行之后
user@box:~$ grep -A 2 my_regex out
line 5 my_regex
line 6
line 7
user@box:~$
Run Code Online (Sandbox Code Playgroud)
Grep精确匹配线和2行之前
user@box:~$ grep -B 2 my_regex out
line 3
line 4
line 5 my_regex
user@box:~$
Run Code Online (Sandbox Code Playgroud)
Grep精确匹配线和前后2行
user@box:~$ grep -C 2 my_regex out
line 3
line 4
line 5 my_regex
line 6
line 7
user@box:~$
Run Code Online (Sandbox Code Playgroud)
参考: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.
Run Code Online (Sandbox Code Playgroud)