Ja też nie. (Cygwin) Czy chciałeś \+? Co to znaczy?
Eric Wilson
tak, korzystam z Ubuntu 10.04 i używam basha. W przypadku BRE w grep musisz uciec od niektórych znaków. Wypróbuj „Podstawowe a rozszerzone wyrażenia regularne” w man grep.
Ankur Agarwal
2
@FarmBoy: +w wyrażeniu regularnym oznacza „jeden lub więcej poprzednich tokenów”. W tym przypadku jest to znak ucieczki, ponieważ jest to składnia wymagana przez grepdomyślny silnik wyrażeń regularnych.
Daenyth
2
@FarmBoy: +należy uciec, jeśli używasz grep; jeśli używasz egrep, nie działa. grep -Ejest równoważne egrep(przynajmniej dla wersji GNU).
Keith Thompson
Odpowiedzi:
196
grepDomyślnym trybem jest (iirc) POSIX regex i \djest to pcre. Możesz albo przekazać -Pdo gnu grep, dla wyrażeń regularnych w stylu perla, albo użyć [[:digit:]]zamiast \d.
Tryb -E grepa w BSD zawiera \ d. Ale tryb -E GNU grepa nie. To tak rażące, że jestem w szoku, że właśnie to odkrywam.
Keith Tyler
> Tryb -E grepa w BSD zawiera \ d. Ale tryb -E GNU grepa nie. To tak rażące, że jestem w szoku, że właśnie to odkrywam. To tylko ugryzło mnie w skrypcie walidacji komunikatów git commit. Byłem bardzo zaskoczony, że był winowajcą.
\+
? Co to znaczy?+
w wyrażeniu regularnym oznacza „jeden lub więcej poprzednich tokenów”. W tym przypadku jest to znak ucieczki, ponieważ jest to składnia wymagana przezgrep
domyślny silnik wyrażeń regularnych.+
należy uciec, jeśli używaszgrep
; jeśli używaszegrep
, nie działa.grep -E
jest równoważneegrep
(przynajmniej dla wersji GNU).Odpowiedzi:
grep
Domyślnym trybem jest (iirc) POSIX regex i\d
jest to pcre. Możesz albo przekazać-P
do gnu grep, dla wyrażeń regularnych w stylu perla, albo użyć[[:digit:]]
zamiast\d
.źródło
Spróbuj tego
$ echo 'this 1 2 3' | grep '[0-9]\+'
źródło