sed: 一致する行の1つ以上のグループ値を置き換える

sed: 一致する行の1つ以上のグループ値を置き換える

ファイル内の設定変数を変更しようとしています。基本的に、ファイルには次の形式の複数の行があります。

$config['var'] = 'val';

望ましい出力:

$config['var'] = 'new_value';

これまでに私が考え出したことは次のとおりです。

sed -i -r "s/^\$config\['var'\]\s*=\s*(..*);$/\1'new_value'/g" config.cfg

ここには数え切れないほど多くの類似の質問があるようですが、回答を試してみましたが、うまくいきませんでした。私が何を間違っているのか、何か手がかりはありますか?

答え1

検索パターンにconfigまたは を含める必要はありません。 beforeを使用して、 で始まる行内でのみ検索と置換を実行します。これにより、タスク全体が簡単になります。var/^$config\['var'\]/s/…/…/$config['var']

sed "/^\$config\['var'\]/ s/=.*;/= 'new_value';/"

注記は$二重引用符のためエスケープされます。 に到達するとエスケープされなくなりますsed。 末尾ではないため、ツールはそれを文字どおりに処理します。

関連情報