我正在搜索某个模式的文件,并希望限制输出,使其不显示整行,而是由几个单词包围的匹配,所以我可以看到上下文。线条太长,无法在输出中舒适地查看整条线。我正在寻找使用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
SOLUTION:
将最小单词数更改为零,这样我们就不会错过任何单词所包含的关键字匹配项:
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
答案 0 :(得分:3)
我相信你正在寻找类似的东西:
egrep -no '(\w+ ){1,3}keyword( \w+){1,2}' file
这将打印包含单词'keyword'的行,并带有行号前缀。它将在比赛前最多打印三个单词,在比赛后最多打印两个单词。
\w
将匹配归类为“字”字符(字母数字或_
)的任何单个字符。
这个答案还假设单词空格分隔的单词。