私は次のようなものを含むテキストファイルを持っています:
12,34 EUR
5,67 EUR
...
「EUR」の前に空白が1つあり、0、XX EURを無視します。
私は試した:
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*
と\s[E]
は一致しますか?
OS:Ubuntu 10.04、grep v2.5
これは、grep 2.5と新しいバージョン間での\s
の処理の動作の違いのように見えます(古いgrepのバグ?)。 grep 2.5.4で結果を確認しましたが、grep 2.6.3(Ubuntu 10.10)を使用すると、4つのgrepsがすべて機能します。
注意:
GNU grep 2.5.4
echo "foo bar" | grep "\s"
(doesn't match)
一方、
GNU grep 2.6.3
echo "foo bar" | grep "\s"
foo bar
おそらく以下のトラブル(\s
が文書化されていないため):
Both GNU greps
echo "foo bar" | grep "[[:space:]]"
foo bar
私のアドバイスは、\s
の使用を避けることです...代わりに[ \t]*
または[[:space:]]
などを使用してください。