grep: '+' 特殊文字

grep: '+' 特殊文字

grep '+'と '*'特殊文字を使用していくつかの簡単なテストを実行しました。

$ echo 'where wh+'> /tmp/toto
$ grep 'wh[e]\*' /tmp/toto
$ grep 'wh[e]*' /tmp/toto
where wh+
$ grep 'wh[e]+' /tmp/toto
$ grep 'wh+' /tmp/toto
$ grep 'wh[e]\+' /tmp/toto
where
$ grep -E 'wh[e]*' /tmp/toto
where wh+
$ grep -E 'wh[e]+' /tmp/toto
where wh+

これらのテストでは、拡張されていないgrep '+'(および '?')は特殊文字として解釈されず、特殊文字として使用するにはエスケープする必要があります。私が知る限り、grepは-Eオプションなしでデフォルトの正規表現を使用します。この場合、特殊文字はここで定義されます。 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03 そして'? 「+」はBREの特殊文字ではありません。

しかし、BREで非特殊文字「+」をエスケープすると、特殊文字になるのはなぜですか?

ベストアンサー1

これはGNU拡張です。 ~からgrep(1)マンページ:

GNU では、grep基本構文と拡張構文の間で使用できる機能に違いはありません。他の実装では、基本正規表現はそれほど強力ではありません。次の説明は拡張正規表現に適用されます。基本正規表現との違いは後で要約されます。

もっと下へ

基本正規表現と拡張正規表現

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

おすすめ記事