Nem eu. (Cygwin) Você pretendia ter \+? O que isso significa?
Eric Wilson
sim, estou no Ubuntu 10.04, usando o bash. Para o BRE no grep, você precisa escapar alguns caracteres. Tente "Expressões regulares básicas versus estendidas" no man grep.
Ankur Agarwal
2
@FarmBoy: +em uma regex significa "um ou mais token anterior". Nesse caso, é escapado porque essa é a sintaxe exigida pelo grepmecanismo de regex padrão de.
Daenyth de
2
@FarmBoy: +precisa ser escapado se você estiver usando grep; se você estiver usando egrep, não. grep -Eé equivalente a egrep(pelo menos para a versão GNU).
Keith Thompson
Respostas:
196
grepo modo padrão de é (iirc) POSIX regex e \dé pcre. Você pode passar -Ppara gnu grep, para expressões regulares do tipo perl, ou usar em [[:digit:]]vez de \d.
O modo -E do grep BSD inclui \ d. Mas o modo -E do GNU grep não. Isso é tão evidente que estou chocado por estar descobrindo agora.
Keith Tyler
> O modo -E do grep BSD inclui \ d. Mas o modo -E do GNU grep não. Isso é tão evidente que estou chocado por estar descobrindo agora. Isso apenas me pegou em um script de validação de mensagem git commit. Fiquei muito surpreso com o fato de ser o culpado.
\+
? O que isso significa?+
em uma regex significa "um ou mais token anterior". Nesse caso, é escapado porque essa é a sintaxe exigida pelogrep
mecanismo de regex padrão de.+
precisa ser escapado se você estiver usandogrep
; se você estiver usandoegrep
, não.grep -E
é equivalente aegrep
(pelo menos para a versão GNU).Respostas:
grep
o modo padrão de é (iirc) POSIX regex e\d
é pcre. Você pode passar-P
para gnu grep, para expressões regulares do tipo perl, ou usar em[[:digit:]]
vez de\d
.fonte
Tente isto
$ echo 'this 1 2 3' | grep '[0-9]\+'
fonte