2017-01-21 2 views
1

Я пытаюсь grep все line breaks after some binary operators в проекте с использованием git bash на компьютере под управлением Windows.git grep <regex, содержащий newline>

Пробовал следующие команды, которые не работают:

$ 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 здесь?

ответ

3

Я не знаю, как включить «-» в наборе символов

Там нет необходимости, чтобы избежать тире символов (-), если вы хотите, чтобы включить его в набор символов. Если вы поместили его первым или последним символом в наборе, он не имеет своего особого значения.

Кроме того, нет необходимости скрывать | внутри диапазона символов. Помимо ^ (когда это первый символ в диапазоне), - (когда он не является первым или последним символом в диапазоне), ] и \ (когда он используется для выхода ]), все остальные персонажи имеют свой литерал (т.е. никакого специального значения) в диапазоне символов.

В regexp также не нужно помещать \n. Средство grepping по умолчанию пытается сопоставить регулярное выражение по одной строке за раз, а git grep делает то же самое. Если вам нужно сопоставить регулярное выражение только в конце строки, тогда поставьте $ (конец строки привязки) в качестве последнего символа регулярного выражения.

Ваш regexp должен быть [-+*|%] *$.

Соединенный, полная командная строка:

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

Спасибо! Мне пришлось использовать 'grep '[- + * |%] \ s * $'' для учета окончаний строк Windows. Оказывается, я также могу найти ответ в [grep manual] (https://www.gnu.org/software/grep/manual/grep.html#Character-Classes-and-Bracket-Expressions). См. Также: [Лучше ли использовать git grep, чем простой grep, если мы хотим искать в версированном исходном коде?] (Http://stackoverflow.com/questions/17557684/is-it-better-to-use-git- Grep, чем обычная-Grep-если-мы-хочу к поиску-в-версированной-х годов) – AXO