И я нет. (Cygwin) Вы хотели иметь \+? Что это значит?
Эрик Уилсон
да, я использую Ubuntu 10.04, использую bash. Для BRE в grep вам нужно экранировать некоторые символы. Попробуйте "Простые и расширенные регулярные выражения" в man grep.
Анкур Агарвал
2
@FarmBoy: +в регулярном выражении означает «один или несколько предыдущих токенов». В этом случае он экранирован, потому что это синтаксис, необходимый для grepмеханизма регулярных выражений по умолчанию.
Daenyth 01
2
@FarmBoy: +нужно экранировать, если вы используете grep; если вы используете egrep, это не так. grep -Eэквивалентно egrep(по крайней мере, для версии GNU).
Кейт Томпсон
Ответы:
196
grepрежим по умолчанию - регулярное выражение POSIX (iirc) и \dpcre. Вы можете либо передать -Pgnu grep для регулярных выражений, подобных Perl, либо использовать [[:digit:]]вместо \d.
Режим BSD grep -E включает \ d. Но режим -E GNU grep - нет. Это так вопиюще, что я в шоке, я просто обнаружил это сейчас.
Кейт Тайлер
> Режим BSD grep -E включает \ d. Но режим -E GNU grep - нет. Это так вопиюще, что я в шоке, я просто обнаружил это сейчас. Это просто укусило меня за скрипт проверки сообщения git commit. Я был очень удивлен, что виноват.
\+
? Что это значит?+
в регулярном выражении означает «один или несколько предыдущих токенов». В этом случае он экранирован, потому что это синтаксис, необходимый дляgrep
механизма регулярных выражений по умолчанию.+
нужно экранировать, если вы используетеgrep
; если вы используетеegrep
, это не так.grep -E
эквивалентноegrep
(по крайней мере, для версии GNU).Ответы:
grep
режим по умолчанию - регулярное выражение POSIX (iirc) и\d
pcre. Вы можете либо передать-P
gnu grep для регулярных выражений, подобных Perl, либо использовать[[:digit:]]
вместо\d
.источник
Попробуй это
$ echo 'this 1 2 3' | grep '[0-9]\+'
источник