【发布时间】:2013-08-30 09:27:39
【问题描述】:
我想在文件中找到出现某种模式但不存在某种其他模式的行。例如,我需要找到包括loom 在内的所有文件/行,但gloom 除外。所以,我可以通过命令找到loom:
grep -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp)
现在,我想搜索 loom,不包括 gloom。但是,以下两个命令都失败了:
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。
编辑 2: 有我的期望示例。 以下两行都在命令输出中:
我通过香的面纱面对隐约可见的图标。
Arty 在忧郁的日子里慢慢消散。
以下两行均不在命令输出中:
这是 gloomyin' 太可怕了 - 伟大的 muckle doolders o' cloods。
在高pyntit大厅的西南环
【问题讨论】:
-
您是否正在寻找符合您的标准的文件?
-
我正在寻找符合我标准的行的文件。我想查看所有集合文件名 + 匹配行数 + 匹配行本身的列表。
-
如果该行是
there is a loom in the gloom- 你想打印那行吗?只是想了解您是否只是在寻找 loom 出现的行而不是作为 gloom 的一部分,或者您是否真的想排除包含 gloom 的行,即使 loom 出现在它自己的其他地方。发布一些示例输入和预期输出会有所帮助。 -
所以你的问题真的是
How do I find lines containing the string "loom" where "loom" is not preceded by the letter "g"?如果您发布了一些示例输入和所需的输出,那将有很大帮助。该问题的答案包含在下面的答案中。 -
@EdMorton - 是的,你是对的 - 我需要所有行,其中出现
loom之前没有g。 (对不起。我昨天开始评论,但没有完成。不小心发送了这条评论。)