SED - 1)と2)の違いは何ですか - 2)が一致しない理由[重複]

SED - 1)と2)の違いは何ですか - 2)が一致しない理由[重複]
  1. echo "123456xx111"| sed '{s/\([x]\)/{\1}/}'
    123456{x}x111
    
  2. echo "123456xx111"| sed '{s/\([x]+\)/{\1}/}'
    123456xx111
    

答え1

Plusはサポートされている場合はバックスラッシュが必要です(GNU拡張)。

echo "123456xx111"| sed '{s/\([x]\+\)/{\1}/}'
123456{xx}111

または拡張正規表現に切り替えます。

echo "123456xx111"| sed -E '{s/([x]+)/{\1}/}'
123456{xx}111

{}外部文字は何もしません。閉じた中括弧の前にセミコロンや改行文字を持たない一部のsed実装では機能しない可能性があるため、式を大幅に簡素化できます。文字列全体を使用するときに何もキャプチャする必要はありません。

echo "123456xx111"| sed -E 's/x+/{&}/'
123456{xx}111

または-E、GNU拡張がない場合(したがって、数量子は\{1,\}「1つ以上」です):

echo "123456xx111"| sed 's/x\{1,\}/{&}/'
123456{xx}111

関連情報