【发布时间】: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
【问题讨论】:
-
您需要提供详细的示例文件并对期望的输出做解释。