ファイル内の設定変数を変更しようとしています。基本的に、ファイルには次の形式の複数の行があります。
$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
。 末尾ではないため、ツールはそれを文字どおりに処理します。