grep + оператор

У меня есть это в моем .vimrc. Найденный на Переполнении стека некоторое время назад:

" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
0
24.09.2013, 11:32
2 ответа

Какой бы ни grep руководство, которое Вы читаете, должно также иметь раздел, объясняя различные виды регулярных выражений (основной и расширенный). + оператор не доступен в основном, только расширенном. Для использования расширенных регулярных выражений Вам нужно -E опция.

2
28.01.2020, 02:15

Большую часть того, о чем мы думаем как "регулярные выражения", на самом деле называют Расширенными регулярными выражениями (или EREs) в POSIX. Но Ваш grep вызов, кажется, находится в режиме Basic Regular Expression (или BRE, если коротко). BREs и EREs имеют много различий. Одно из этих различий - то, что необходимо выйти из метасимволов: + литеральный знак "плюс", если Вы не выходите из него с обратной косой чертой. Ваш grep команда, кажется, находится в режиме BRE, так попытайтесь использовать \+ вместо плоскости +.

Если Вы действительно строги о BRE по сравнению с ДО, то BREs на самом деле не поддерживают + и ? операции, хотя можно моделировать их с \{1,\} и \{0,1\} конструкции, соответственно. Строгие BREs не поддерживают | оператор также, и я не уверен, как Вы моделируете это в BRE. Однако в отличие от EREs, BREs поддерживают обратные ссылки (которые смотрят много как, они делают в Perl, за исключением того, что необходимо выйти из parens).

Некоторые grep реализации (как GNU) поддерживают ?, +, и | операторы в режиме BRE, хотя необходимо выйти из них как любые другие метасимволы: \?, \+, и \|. Но нет grep реализации, что я знаю о поддержке backreferencing в режиме ERE.

Вызвать Ваш grep для использования режима ERE можно использовать -E опция к grep, или можно назвать его как egrep вместо этого.

4
28.01.2020, 02:15
  • 1
    GNU grep -E обратные ссылки поддержек, с которыми можно проверить echo aa | grep -E '(.)\1'. –  Stéphane Chazelas 23.09.2013, 19:54

Теги

Похожие вопросы