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.