首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以显示搜索关键字+/- 3字的grep输出?

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

Stack Overflow用户
提问于 2015-11-07 05:50:01
回答 1查看 1.2K关注 0票数 0

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

可以用搜索结果的+/- 3字而不是整行显示grep命令输出吗?

我正试着得到这样的结果

$grep -in linux grep_test.txt

1:Linux-based系统是

1:单片内核,Linux内核,它处理

3:大多数Linux-based系统的一部分,提供

3:大多数Linux系统都使用它。

3:最近,Linux社区试图

​

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-07 05:58:20

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

代码语言:javascript
复制
$ cat file
a cat
a is for a cat and b is for bat
aa bb cat
cat in hat

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

代码语言:javascript
复制
$ 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}匹配它所遵循的模式的0到3。因为grep正则表达式在默认情况下是贪婪的,所以它将尽可能多地匹配这三个单词。

控制高亮

要只突出显示搜索单词,在本例中使用cat,使用两个grep:

代码语言:javascript
复制
grep -inoE '(\w+\W+){0,3}cat(\W+\w+){0,3}' file | grep -i cat

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

上面的假设假设您有grep --color=auto作为grep的别名,这是非常常见的。这告诉grep在输出到终端时应用颜色,但如果输出到文件或管道,则不应用颜色。

如果没有--color=auto,那么可以为最后一个grep显式地打开颜色

代码语言:javascript
复制
grep -inoE '(\w+\W+){0,3}cat(\W+\w+){0,3}' file | grep -i --color cat
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33579606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档