2011-08-01 13 views
72

これは出力を生成しません。どうして? dはgrepの基本式でサポートされていませんか?

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

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

なしを試してみてくださいません。 – spraff

+0

私も。 (Cygwin) '\ +'を持っていたのですか?どういう意味ですか? –

+0

はい、私はUbuntu 10.04で、bashを使用しています。 grepのBREの場合、いくつかの文字をエスケープする必要があります。 man grepで "Basic vs Extended Regular Express "を試してください。 – abc

答えて

125

grepのデフォルトモードがある(IIRC)POSIX正規表現、および\dはPCREです:

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

しかし、これらはやります。 gnu grepに-Pを渡すか、perlのような正規表現にするか、\dの代わりに[[:digit:]]を使用してください。

[email protected] ~ $ echo 1 | grep -P '\d' 
1 
[email protected] ~ $ echo 1 | grep '[[:digit:]]' 
1 
+2

BSD grepの-Eモードに\ dが含まれています。しかしGNU grepの-Eモードはそうではありません。それは非常に目立っている私はショックを受けている私は今それを発見しています。 –

15

私のためにそれらの作業(Solarisの場合)のこの$ echo 'this 1 2 3' | grep '[0-9]\+'

+1

多分 "grep -E"オプションが役に立ちます – bortunac

関連する問題