git grep <regex containing newline>

git grep <regex containing newline>

我正在尝试在 Windows 机器上使用 git bash grep 项目中的所有 line breaks after some binary operators

尝试了以下无效的命令:

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

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

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

$ git grep "[+*%] *\n"
somefile.py:            self[:] = '|' + name + '='
                                      ^^^

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

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

I don't know how to include "-" in a character set

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

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

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

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

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

git grep '[-+*|%] *$'