2010-11-20 18 views
53

は、私のようなものを含む、テキストファイルを持っている:grepの正規表現の空白行動

12,34 EUR 
5,67 EUR 
... 

あり 'EUR' の前に1つの空白があると私は0、XXユーロを無視します。

は、私が試した:

grep '[1-9][0-9]*,[0-9]\{2\}\sEUR' => didn't match !

grep '[1-9][0-9]*,[0-9]\{2\} EUR' => worked !

grep '[1-9][0-9]*,[0-9]\{2\}\s*EUR' => worked !

grep '[1-9][0-9]*,[0-9]\{2\}\s[E]UR' => worked !

私は\sが、\s*とを使用することはできませんなぜ誰かは、plsは私に説明できますと一致しましたか?

OS:Ubuntuの10.04、grepのv2.5の

答えて

78

これは2.5のgrepと新しいバージョンの間\sの取り扱いにおける行動の違いのように見えます(旧グレップのバグ?)。私はあなたの結果をgrep 2.5.4で確認していますが、grep 2.6.3(Ubuntu 10.10)を使用している場合、4人のgrepすべてが動作します。

注:

GNU grep 2.5.4 
echo "foo bar" | grep "\s" 
    (doesn't match) 

\sが文書化されていないと)おそらく

GNU grep 2.6.3 
echo "foo bar" | grep "\s" 
foo bar 

以下のトラブルに対し:

Both GNU greps 
echo "foo bar" | grep "[[:space:]]" 
foo bar 

私のアドバイスは...使用\sを使用しないことですまたは[:space:]または何らかの代わりにそれが好きです。

+19

または単に '[:space:]'とします。このように 'cat file | grep "([:space:]]" ' –

+0

このバグリクエストhttp://www.mail-archive.com/bug-grepに従って、新しいバージョンのgrep(他の視点)のバグと思われます。 @ gnu.org/msg02686.htmlしかし、最後のステートメントはなぜ一致しますか? – Milde

+0

@Milde、フォローアップの記事http://www.mail-archive.com/[email protected]/msg02689.htmlに、そのバグレポートが無効でクローズとマークされている箇所に注意してください(これはバグではないと思われます新しいgrepで)。 – Kamal

関連する問題