1. ホーム
  2. regex

[解決済み] grep regex ホワイトスペースの動作

2022-12-12 05:42:29

質問

私は、以下のような内容を含むテキストファイルを持っています。

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

どのように解決するのですか?

の処理における動作の違いのようです。 \s の扱いの違いのようです (古い grep のバグ?)。 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)

ここで

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:]] などの代わりに