grepで汎用パターン演算子{m,n}を使用するには?

grepで汎用パターン演算子{m,n}を使用するには?

文字列 "tt"を含む行を選択するだけのテキストファイルがあります。だから私はコマンドラインで次のことを試しました。

grep "t{2}" textfile

テキストファイルに「rotten」「litter」などの単語が含まれていることはわかっていますが、grepコマンドは行を表示せずにステータス1で終了します。

私は別の一般的なパターンを試しました。

grep "a.*x" textfile

これにはうまくいきます。

答え1

基本的に、grep使用基本正規表現、grepが複数の文字と一致するようにするには、中かっこをエスケープする必要があります。

grep 't\{2\}' textfile

または、このオプションを使用できます-E(またはGNU grepの-Pオプション、これPerl互換正規表現)grep使用拡張正規表現、エスケープなしで中括弧を使用できます。

grep -E 't{2}'

答え2

中かっこをエスケープする必要があります。

grep 't\{2\}' textfile

それ以外の場合は{リテラル}文字として扱われます。

答え3

-E--extended-regexp)または-P()オプションを使用する必要があります--perl-regexp(GNU grepを使用)。

GNU grep(1) のマニュアルページによると基本正規表現と拡張正規表現つまり、次のオプションを使用しないことを選択した場合:

基本正規表現では、メタ文字?、+、{、|、(および)はバックスラッシュバージョン\?、\+、\{、\|、\(および\)の代わりに特別な意味を失います。

関連情報