【问题标题】:How to grep a file and output the matching part of a line plus a few surrounding words?如何grep文件并输出一行的匹配部分加上几个周围的单词?
【发布时间】:2014-03-15 01:47:08
【问题描述】:

我正在文件中搜索模式并希望限制输出,使其不显示整行,而是显示由几个单词包围的匹配项,以便我可以看到上下文。行太长,无法舒适地查看输出中的整行。我正在寻找使用 grep、awk 和/或 sed 的解决方案。 grep 有 -o 选项,如果我有正确的正则表达式,可能会使用它。

作为一个额外的功能,如果解决方案可以选择支持 grep 的行号功能,那就太好了,这样行号可以在需要时与输出一起打印。

更新:
这是一个测试文件:

1 2 3 4 5 abc 1 2 3 4
abc
1 2 abc
abc 1
1 abc 1
1 2 3 abc 1 2 3
1 2 3 4 abc 1
1 2 3 4 5 6
1 2 3 4 5
1 2 3
1

解决方案:

将最小单词的数量更改为零,这样我们就不会错过没有被任何单词包围的关键字的匹配:

egrep -no '(\w+ ){0,3}keyword( \w+){0,2}' file

例子:

egrep -no '(\w+ ){0,3}abc( \w+){0,2}' test.txt

输出:

1:3 4 5 abc 1 2
2:abc
3:1 2 abc
4:abc 1
5:1 abc 1
6:1 2 3 abc 1 2
7:2 3 4 abc 1

【问题讨论】:

  • 您需要提供详细的示例文件并对期望的输出做解释。

标签: linux bash sed awk grep


【解决方案1】:

我相信您正在寻找类似的东西:

egrep -no '(\w+ ){1,3}keyword( \w+){1,2}' file

这将打印包含带有行号前缀的单词“keyword”的行。它将在比赛前最多打印三个词,在比赛后最多打印两个词。

\w 将匹配归类为“单词”字符(字母数字或_)的任何单个字符。

此答案还假设单词 a 由单个空格字符分隔。

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 2011-09-19
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    相关资源
    最近更新 更多