[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 では、\+
一般的な一般プラス記号を表します。