Wird \ d von den Grundausdrücken von grep nicht unterstützt?


118

Dies erzeugt keine Ausgabe. Woher?

$ echo 'this 1 2 3' | grep '\d\+'

Aber diese tun:

$ echo 'this 1 2 3' | grep '\s\+'
this 1 2 3

$ echo 'this 1 2 3' | grep '\w\+'
this 1 2 3

2
Nichts davon funktioniert für mich (Solaris).
Spraff

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.

daenyth@Bragi ~ $ echo 1 | grep -P '\d'
1
daenyth@Bragi ~ $ echo 1 | grep '[[:digit:]]'
1

10
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.
Austinbruch

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.