У меня есть это в моем .vimrc. Найденный на Переполнении стека некоторое время назад:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
Какой бы ни grep руководство, которое Вы читаете, должно также иметь раздел, объясняя различные виды регулярных выражений (основной и расширенный). +
оператор не доступен в основном, только расширенном. Для использования расширенных регулярных выражений Вам нужно -E
опция.
Большую часть того, о чем мы думаем как "регулярные выражения", на самом деле называют Расширенными регулярными выражениями (или 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
вместо этого.
grep -E
обратные ссылки поддержек, с которыми можно проверить echo aa | grep -E '(.)\1'
.
– Stéphane Chazelas
23.09.2013, 19:54