Ich auch nicht. (Cygwin) Wolltest du haben \+? Was bedeutet das?
Eric Wilson
Ja, ich bin auf Ubuntu 10.04 und benutze Bash. Für BRE in grep müssen Sie einigen Zeichen entkommen. Versuchen Sie "Basic vs Extended Regular Expressions" in man grep.
Ankur Agarwal
2
@FarmBoy: +In einem regulären Ausdruck bedeutet "einer oder mehrere der vorherigen Token". In diesem Fall wird es maskiert, da dies die Syntax ist, die von grepder Standard-Regex-Engine benötigt wird.
Daenyth
2
@FarmBoy: +muss maskiert werden, wenn Sie verwenden grep; Wenn Sie verwenden egrep, ist dies nicht der Fall. grep -Eentspricht egrep(zumindest für die GNU-Version).
Keith Thompson
Antworten:
196
grepDer Standardmodus ist (iirc) POSIX \dregex und ist pcre. Sie können entweder -Pan gnu grep übergeben, um perlähnliche reguläre Ausdrücke zu erhalten, oder [[:digit:]]stattdessen verwenden \d.
Der -E-Modus von BSD grep enthält \ d. Der -E-Modus von GNU grep funktioniert jedoch nicht. Das ist so grell, dass ich schockiert bin, dass ich es gerade erst entdecke.
Keith Tyler
> Der -E-Modus von BSD grep enthält \ d. Der -E-Modus von GNU grep funktioniert jedoch nicht. Das ist so grell, dass ich schockiert bin, dass ich es gerade erst entdecke. Dies hat mich nur in ein Validierungsskript für Git-Commit-Nachrichten gebissen. Ich war sehr überrascht, dass der Schuldige war.
\+
? Was bedeutet das?+
In einem regulären Ausdruck bedeutet "einer oder mehrere der vorherigen Token". In diesem Fall wird es maskiert, da dies die Syntax ist, die vongrep
der Standard-Regex-Engine benötigt wird.+
muss maskiert werden, wenn Sie verwendengrep
; Wenn Sie verwendenegrep
, ist dies nicht der Fall.grep -E
entsprichtegrep
(zumindest für die GNU-Version).Antworten:
grep
Der Standardmodus ist (iirc) POSIX\d
regex und ist pcre. Sie können entweder-P
an gnu grep übergeben, um perlähnliche reguläre Ausdrücke zu erhalten, oder[[:digit:]]
stattdessen verwenden\d
.quelle
Versuche dies
$ echo 'this 1 2 3' | grep '[0-9]\+'
quelle