4

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

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

$ 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的正确方法是什么?

4

1 回答 1

6

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

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

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

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

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

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

git grep '[-+*|%] *$'
于 2017-01-21T09:32:17.987 回答