git grep <包含换行符的正则表达式>

AXO*_*AXO 4 regex git git-grep

我正在尝试在 Windows 机器上使用 git bash 的项目中的某些二进制运算符之后grep 所有换行符

尝试了以下不起作用的命令:

$ git grep "[+-*\|%]\ *\n"
fatal: command line, '[+-*\|%]\ *\n': Invalid range end

$ git grep "[+\-*\|%]\ *\n"
fatal: command line, '[+\-*\|%]\ *\n': Invalid range end
Run Code Online (Sandbox Code Playgroud)

好的,我不知道如何在字符集中包含“-”,但是在删除它之后仍然可以从字面上\n匹配字符n

$ git grep "[+*%] *\n"
somefile.py:            self[:] = '|' + name + '='
                                      ^^^
Run Code Online (Sandbox Code Playgroud)

转义反斜杠一次 ( \\n) 无效,转义两次 ( \\\n) 会导致正则表达式匹配\n(字面意思)。

在这里 grep 的正确方法是什么?

axi*_*iac 6

我不知道如何在字符集中包含“-”

-如果要将破折号字符 ( ) 包含在字符集中,则无需对其进行转义。如果将它放在集合中的第一个或最后一个字符,则它没有特殊含义。

此外,无需|在字符范围内转义。除了^(当它是范围中的第一个字符时)、-(当它不是范围中的第一个或最后一个字符时)]\(当它用于转义时]),所有其他字符都有它们的字面含义(即没有特殊的含义)在一个字符范围内。

也不需要放入正\n则表达式。默认情况下,grepping 工具尝试一次将正则表达式与一行匹配,git grep并执行相同的操作。如果您只需要在行尾匹配正则表达式,则将$(行尾锚点)作为正则表达式的最后一个字符。

你的正则表达式应该是[-+*|%] *$.

放在一起,完整的命令行是:

git grep '[-+*|%] *$'
Run Code Online (Sandbox Code Playgroud)