如何为包含“>”的字符串git grep?

问题描述 投票:2回答:2

git grep似乎比常规GNU grep更简单的规则,这将允许你search for tabsescape special characters with a backslash。我试图找到字符串->upload的出现,并没有办法逃避它似乎工作。

我如何运行git grep "->upload"

$ git grep ->upload
No output; return 0
$ git grep "->upload"
error: unknown switch `>'
git grep "\-\>upload"
No output; return error
$ git grep '->upload'
error: unknown switch `>'
git bash
2个回答
4
投票

如果有疑问,请使用单字符类而不是反斜杠在正则表达式中创建单个字符文字:

git grep -e '-[>]upload'

反斜杠的含义可能会有所不同,具体取决于特定字符和使用的特定正则表达式语法,[>]的含义始终如一。

也就是说,这里最直接的问题不是由>引起的,而是由引导的破折号引起的,这使得字符串与选项列表无法区分。

需要-e不是因为>,而是因为-。没有它,->upload将被视为一系列旗帜(->-u-p-l-o-a-d)。


也就是说,你可以通过将短划线移动到一个字符类中而不使用-e,从而使它不再是命令行中的第一个字符:

git grep '[-][>]upload'

1
投票
git grep -F -- '->upload'

选项-F表示:对模式使用固定字符串(不要将模式解释为正则表达式)。

--将选项与参数分开。

© www.soinside.com 2019 - 2024. All rights reserved.