是否可以显示搜索关键字的+/- 3个单词的grep输出?

时间:2015-11-07 05:50:01

标签: linux grep

我想将信息存储在文本文件中并使用grep进行搜索。 使用命令grep -in <keyword> <file>,我可以显示行号,该行包含关键字。但是,如果行包含长行文本,则输出有时会更不易读。

是否可以使用搜索结果的+/- 3个单词而不是整行显示grep命令输出?

我试图得到像结果一样的结果 $grep -in linux grep_test.txt
1:基于 Linux 的系统是一个 1:单片内核,Linux内核,处理
3:大多数基于 Linux 的系统的一部分,提供
3:大多数 Linux 系统使用的是建立的 3:最近, Linux 社区寻求

enter image description here

1 个答案:

答案 0 :(得分:1)

让我们使用这个测试文件:

$ cat file
a cat
a is for a cat and b is for bat
aa bb cat
cat in hat

而且,让我们使用这个正则表达式来获取前后三个单词:

$ grep -inoE '(\w+\W+){0,3}cat(\W+\w+){0,3}' file
1:a cat
2:is for a cat and b is
3:aa bb cat
4:cat in hat

选项-o告诉grep只显示 匹配的部分。

在正则表达式中,\w表示单词字符,\W表示任何不是单词字符的字符。 {0,3}匹配它遵循的模式的零到三。因为默认情况下grep regex是贪婪的,所以它会尝试尽可能多地匹配这三个单词。

控制突出显示

要仅突出显示搜索词{@ 1}},请使用两个greps:

cat

因为第一个grep正在将其输出发送到管道,所以它不会突出显示。相比之下,第二个grep会将其输出发送到终端,因此它用于突出显示我们想要突出显示的内容。