正規表現「.+」が期待どおりに機能しないのはなぜですか? [コピー]

正規表現「.+」が期待どおりに機能しないのはなぜですか? [コピー]
[root@localhost opt]# cat cfg
key = value
[root@localhost opt]# grep 'key\s*=\s*.+' cfg
[root@localhost opt]# 

私の意図は次のとおりです。=記号の後にはゼロ個以上のスペースを含めることができますが、後ろにはスペース以外の文字を1つ以上含める必要があります。

この行はなぜ出力されないのですかkey = value

ベストアンサー1

観察する:

$ grep 'key\s*=\s*.+' cfg
$ grep 'key\s*=\s*.\+' cfg
key = value
$ grep -E 'key\s*=\s*.+' cfg
key = value

デフォルトの正規表現(BRE、デフォルト)はプラス+記号を表します。 GNU拡張として、1つ以上の古い文字を表すために使用できます\+?、、に{|同様です(。バックスラッシュでエスケープしない限り、BREでは通常の文字として扱われます。

拡張正規表現を使用すると、ルールが変更されます-E。 ERE の場合、バックスラッシュは必要なく、通常は+1 つ以上の前の文字を表します。 ERE では、\+一般的な一般プラス記号を表します。

おすすめ記事