我想将信息存储在文本文件中并使用grep进行搜索。
使用命令grep -in <keyword> <file>
,我可以显示行号,该行包含关键字。但是,如果行包含长行文本,则输出有时会更不易读。
是否可以使用搜索结果的+/- 3个单词而不是整行显示grep命令输出?
我试图得到像结果一样的结果
$grep -in linux grep_test.txt
1:基于 Linux 的系统是一个
1:单片内核,Linux内核,处理
3:大多数基于 Linux 的系统的一部分,提供
3:大多数 Linux 系统使用的是建立的
3:最近, Linux 社区寻求
答案 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会将其输出发送到终端,因此它用于突出显示我们想要突出显示的内容。