我正在尝试使用git grep搜索模式,但超级模式除外。
我的具体示例是:
git grep 'ad'
但是我想排除所有模式,例如“ load”和“ Load”,“ Thread”和“ thread(self)”等,等等,有没有简单的方法呢?
答案 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
。