grep -E正規表現の構文が変更されましたか?

grep -E正規表現の構文が変更されましたか?

私が読んだ多くの文書によると、次のコマンドはxが連続して3回以上、4回以下で表示される行と一致する必要があります。

grep -E {x}\{3,4}

例えばhttp://www.delorie.com/gnu/docs/grep/grep_7.htmlまたはhttp://www.google.com/support/enterprise/static/postini/docs/admin/en/admin_ee_cu/cm_regex.html

おそらく、これは一致するものが返されないことを意味します。

xxxxx
xxxxxx

しかし、テストファイルを作成してこのコマンドを実行しました。

grep -o -E [x]\{3,4} testfile

次の出力を返しました。

xxxx
xxxx

2行が一致します。どうなりますか?これがSolarisのbashシェルの外観です。

ベストアンサー1

まず、どの特殊文字を使用してシェルが何をしているのかを覚えるのは痛いので、常にgrep式を引用する必要があります。

grep -o -E '[x]{3,4}' testfile

第二に、最小限の一致が見つかります。非常に簡単なので、より長い実行にわたって3〜4つの実行を一致させることをお勧めしgrepます。これが発生しないようにするには、ある種の境界条件が必要です。xxいいえ長距離ランニングのサブセットを一致させます。 PCREをサポートしているユーザーは、grep幅0のツアーを使用してこれを達成できます。

(echo xxx; echo xxxxxx) | grep -P '(?<!x)xxx(?!x)'

おすすめ記事