正規表現パターンを変数として sed の置換を使用するにはどうすればよいでしょうか?

正規表現パターンを変数として sed の置換を使用するにはどうすればよいでしょうか?

stdin として次のものがあるとします (例として)

Life is temporary

sedでこれを置き換えたい

Life is permanent

次のようなコマンドで

sed 's/Life<%XY=.*>temporary/Life%XYpermanent'

もちろん、上記は有効なコマンドではなく、例として提供されているものであることは承知しています。.*一致するものはすべて変数に保存し、置換文字列でその変数を呼び出したいのです。

答え1

sed 's/Life\(.*\)temporary/Life\1permanent/'

ここでは、パターン内の最初の括弧のペアを指します。この場合はこれが唯一のペアですが、通常は、 など、最大 まで\1複数のペアを使用できます。\2\3\9

括弧はエスケープされています。 括弧\がなければ、文字どおりに解釈され、\1機能しません。 を使用するとsed -E、逆になります。 は(特別になり、\(リテラルを表します((一般に、これが唯一の違いではないことに注意してください-E)。

sed -E 's/Life(.*)temporary/Life\1permanent/'

この変更により、sed人間にとってコードが多少読みやすくなります。

関連情報