grep排除超级字符串

时间:2018-10-26 21:22:36

标签: git grep

我正在尝试使用git grep搜索模式,但超级模式除外。

我的具体示例是:

git grep 'ad'

但是我想排除所有模式,例如“ load”和“ Load”,“ Thread”和“ thread(self)”等,等等,有没有简单的方法呢?

3 个答案:

答案 0 :(得分:1)

在评论部分由@codeforester回答。

git grep -w ad

让我扩展并解释其含义。

  

git grep
   -w / --word-regexp

     

仅在单词边界上匹配模式 (可以从行的开头开始,
  或前面带有非文字字符;结束于一行的末尾,或后跟非单词字符。

添加-w将搜索整个单词而不是其中的一部分,这意味着该模式必须与整个文本匹配,而不仅仅是部分文本。


在unix grep手册页中:

  

仅选择那些包含组成整个单词的匹配项的行
    测试是匹配的子字符串必须是     在该行的开头,或前面有一个非单词     组成特征。类似地,它必须在结尾处     的行或后面的非单词组成字符。     单词构成的字符是字母,数字和     下划线。

答案 1 :(得分:0)

使用-w选项使其仅在单词上搜索。这适用于标准grep以及大多数greplike工具。

答案 2 :(得分:0)

根据您的进一步请求,如果您仍然想匹配某些单词,但不是全部,您可以通过以下几种方式排除一个单词(或单词列表):

整个单词

如前所述,匹配的整个单词将匹配“单词”单元中包含的模式。这些词的单位是字母,数字和下划线。 -w是该选项:

git grep -w ad将仅找到单词“ ad”的实例,而找不到“ load”或“ toad”等。

反向匹配

另一种选择是将grep重新传递到其自身,并使用反向匹配标志。假设您要查找“ ad”的实例以及所有包含“ ad”的单词,但“ toad”和“ load”除外。您可以使用-v将grep输送到另一个grep命令,并使用转义的管道(|)作为分隔符,以提供要排除的单词列表:

git grep ad | grep -v "toad\|load"

或者如果您使用的是正则表达式:

git grep ad | grep -ve "toad|load"

如果您仍然希望使用more类型的操作,则可以将最后一位传递给more

相关问题