I'm trying to grep all line breaks after some binary operators in a project using git bash on a Windows machine.
Tried the following commands which did not work:
$ git grep "[+-*\|%]\ *\n"
fatal: command line, '[+-*\|%]\ *\n': Invalid range end
$ git grep "[+\-*\|%]\ *\n"
fatal: command line, '[+\-*\|%]\ *\n': Invalid range end
OK, I don't know how to include "-" in a character set, but still after removing it the \n
matches the character n
literally:
$ git grep "[+*%] *\n"
somefile.py: self[:] = '|' + name + '='
^^^
Escaping the backslash once (\\n
) has no effect, and escaping it twice (\\\n
) causes the regex to match \n
(literally).
What is the correct way to grep here?
There is no need to escape the dash character (
-
) if you want to include it in a character set. If you put it the first or the last character in set it doesn't have its special meaning.Also, there is no need to escape
|
inside a character range. Apart from^
(when it's the first character in the range),-
(when it is not the first or the last character in the range),]
and\
(when it is used to escape]
), all other characters have their literal meaning (i.e no special meaning) in a character range.There is also no need to put
\n
in the regexp. The grepping tools, by default, try to match the regexp against one row at a time andgit grep
does the same. If you need to match the regexp only at the end of line then put$
(the end of line anchor) as the last character of the regexp.Your regexp should be
[-+*|%] *$
.Put together, the complete command line is: