web-dev-qa-db-ja.com

sed -r vs. sed-正規表現の可能性はどのように拡張されますか?

Bashでは、私が理解しているように、のような文字を使用できます。 &^ * sedを使用した正規表現ですが、-rオプションを使用すると、grepとgrep -Eのように、正規表現の表現方法が変わります。しかし、構文がどのように変更されるかについての要約は見つかりません。どこかにリストはありますか?これは、数ページに印刷できる表にまとめることができるはずのようなものだと私は素朴に思っていますか?

プレーンな古い非拡張sed正規表現で機能する文字は、-rオプションでも同じように機能しますか?言い換えると、-rオプションなしで有効であり、有効であり、-rオプション付きで同じことを意味する式はありますか?それらが-rオプションで有効な式のサブセットであったように?

私は、どこかに例を挙げて、違いの簡潔な要約があるに違いないと考え続けています。

3

info sedによると、拡張正規表現は 'egrep'が受け入れるものです。通常はバックスラッシュが少ないため、より明確になりますが、GNU拡張であり、したがってスクリプトです。それらを使用するものは移植性がありませんegrepgrep -Eの同義語です。

これは確かに当てはまります:なし:

echo "abcdef" | sed 's/\([cd]\+\)/\U\1/'
abCDef

と:

echo "abcdef" | sed -r 's/([cd]+)/\U\1/'
abCDef

一部の式は両方で有効な場合がありますが、多くの場合、解釈が異なります。通常のPOSIX準拠のsedの文字エスケープロジックは、完全に私をエスケープします。

3
xenoid