当前位置: 首页>>技术教程>>正文


在bash中,如何在grep结果之前/之后获取行?

, ,

问题描述

嗨,我是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”匹配后打印十行

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9205.html,未经允许,请勿转载。