我希望在文件中找到出现某种模式而不存在其他模式的行。例如,我需要查找除带有gloom的文件/行之外的所有文件/行,包括loom。所以,我可以用命令找到loom:
grep -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp)现在,我想搜索不包括gloom的loom。但是,以下两个命令都失败了:
grep -v 'gloom' -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp)
grep -n 'loom' -v 'gloom' ~/projects/**/trunk/src/**/*.@(h|cpp)我应该做些什么来实现我的目标?
编辑1:我的意思是loom和gloom是字符序列(不一定是单词)。因此,例如,我需要在命令输出中使用bloomberg,而不需要ungloomy。
EDIT 2:这是我期望的样本。以下两行都在命令输出中:
我面对着透过香幕隐约可见的圣像。
阿蒂在阴沉的日子里昏昏欲睡。
以下两行都不在命令输出中:
这是令人沮丧的可怕的-伟大的粘液堆积物O‘cloods。
在heigh hall的西南圆
发布于 2013-08-27 22:49:31
把grep链接起来怎么样?
grep -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp) | grep -v 'gloom'发布于 2013-08-27 23:00:33
另一种不链接grep的解决方案
egrep '(^|[^g])loom' ~/projects/**/trunk/src/**/*.@(h|cpp)在方括号之间,除非loom是该行的第一个字符,否则应在出现任何loom之前排除字符g。
发布于 2016-07-08 15:59:22
有点老,但是哦,好吧……
来自@houbysoft的最受欢迎的解决方案将不起作用,因为它将排除任何带有“阴暗”的行,即使它有“织机”。根据OP的预期,我们需要包含带有"loom“的行,即使它们中也有"gloom”。这一行需要在输出中出现"Arty is slooming in a gloomy day。“,但是这将被链接的grep排除,比如
grep -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp) | grep -v 'gloom'相反,Bentoy13的egrep regex示例运行得更好
egrep '(^|[^g])loom' ~/projects/**/trunk/src/**/*.@(h|cpp)因为它将包含任何带有"loom“的行,而不管它是否有"gloom”。另一方面,如果它只有阴暗,它就不会包括它,这正是OP想要的行为。
https://stackoverflow.com/questions/18468716
复制相似问题