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?
I don't know how to include "-" in a character set
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 and git 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:
git grep '[-+*|%] *$'