\ d는 grep의 기본 표현식에서 지원되지 않습니까?


119

이것은 출력을 생성하지 않습니다. 어째서?

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

그러나 이것들은 :

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

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

2
저에게는 그 어느 것도 작동하지 않습니다 (Solaris).
spraff

나도. (Cygwin) 갖고 싶었나요 \+? 그게 무슨 뜻입니까?
Eric Wilson

예, bash를 사용하여 Ubuntu 10.04에 있습니다. grep의 BRE의 경우 일부 문자를 이스케이프해야합니다. man grep에서 "Basic vs Extended Regular Expressions"를 사용해보십시오.
Ankur Agarwal

2
@FarmBoy : +정규식에서 "이전 토큰 중 하나 이상"을 의미합니다. 이 경우 grep의 기본 정규식 엔진에 필요한 구문이기 때문에 이스케이프 됩니다.
Daenyth

2
@FarmBoy : +사용중인 경우 이스케이프해야합니다 grep. 을 사용하는 egrep경우에는 그렇지 않습니다. (적어도 GNU 버전의 경우) grep -E와 동일합니다 egrep.
Keith Thompson

답변:


196

grep의 기본 모드는 (iirc) POSIX 정규식 \d이며 pcre입니다. 당신도 통과 할 수 -P펄 같은 regexps '에 대한, GNU 그렙에, 또는 사용하는 [[:digit:]]대신 \d.

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

10
BSD grep의 -E 모드에는 \ d가 포함됩니다. 그러나 GNU grep의 -E 모드는 그렇지 않습니다. 너무 눈부셔 서 놀랍습니다. 지금 발견하고 있습니다.
Keith Tyler

> BSD grep의 -E 모드에는 \ d가 포함됩니다. 그러나 GNU grep의 -E 모드는 그렇지 않습니다. 너무 눈부셔 서 놀랍습니다. 지금 발견하고 있습니다. 이것은 git commit 메시지 유효성 검사 스크립트에서 나를 물었습니다. \ d가 범인이라는 것에 매우 놀랐습니다.
austinbruch

18

이 시도 $ echo 'this 1 2 3' | grep '[0-9]\+'


1
어쩌면 "그렙 -E"옵션은 도움이 될 것입니다
bortunac
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.