首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行grep,不包括某些模式?

如何进行grep,不包括某些模式?
EN

Stack Overflow用户
提问于 2013-08-27 22:47:31
回答 10查看 260K关注 0票数 97

我希望在文件中找到出现某种模式而不存在其他模式的行。例如,我需要查找除带有gloom的文件/行之外的所有文件/行,包括loom。所以,我可以用命令找到loom

代码语言:javascript
复制
grep -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp)

现在,我想搜索不包括gloomloom。但是,以下两个命令都失败了:

代码语言:javascript
复制
grep -v 'gloom' -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp)
grep -n 'loom' -v 'gloom' ~/projects/**/trunk/src/**/*.@(h|cpp)

我应该做些什么来实现我的目标?

编辑1:我的意思是loomgloom是字符序列(不一定是单词)。因此,例如,我需要在命令输出中使用bloomberg,而不需要ungloomy

EDIT 2:这是我期望的样本。以下两行都在命令输出中:

我面对着透过香幕隐约可见的圣像。

阿蒂在阴沉的日子里昏昏欲睡。

以下两行都不在命令输出中:

这是令人沮丧的可怕的-伟大的粘液堆积物O‘cloods。

在heigh hall的西南圆

EN

回答 10

Stack Overflow用户

发布于 2013-08-27 22:49:31

把grep链接起来怎么样?

代码语言:javascript
复制
grep -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp) | grep -v 'gloom'
票数 115
EN

Stack Overflow用户

发布于 2013-08-27 23:00:33

另一种不链接grep的解决方案

代码语言:javascript
复制
egrep '(^|[^g])loom' ~/projects/**/trunk/src/**/*.@(h|cpp)

在方括号之间,除非loom是该行的第一个字符,否则应在出现任何loom之前排除字符g

票数 23
EN

Stack Overflow用户

发布于 2016-07-08 15:59:22

有点老,但是哦,好吧……

来自@houbysoft的最受欢迎的解决方案将不起作用,因为它将排除任何带有“阴暗”的行,即使它有“织机”。根据OP的预期,我们需要包含带有"loom“的行,即使它们中也有"gloom”。这一行需要在输出中出现"Arty is slooming in a gloomy day。“,但是这将被链接的grep排除,比如

代码语言:javascript
复制
grep -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp) | grep -v 'gloom'

相反,Bentoy13egrep regex示例运行得更好

代码语言:javascript
复制
egrep '(^|[^g])loom' ~/projects/**/trunk/src/**/*.@(h|cpp)

因为它将包含任何带有"loom“的行,而不管它是否有"gloom”。另一方面,如果它只有阴暗,它就不会包括它,这正是OP想要的行为。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18468716

复制
相关文章

相似问题

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