こんにちは、私はこの分野が初めてなので少し待ってください。 clを介して編集したい設定ファイル.iniがあり、設定値を簡単に変更できるスクリプトを作成しようとしています。たとえば、falseをtrueに変更します。
[logs]
enabled = false
[smtp]
enabled = false
[system]
enabled = false
sedまたはawk(または他のツール)を使用してsmtpの有効化をtrueに設定し、出力をシェル自体に書き込むことなくファイルを保存する方法
編集:これを試しましたが、sed -i 's/[smtp]\nenabled = false/[smtp]\nenabled = true/' file.ini
私には効果がありません
ベストアンサー1
INIファイルは実際に正しい形式のTOMLファイルです。 TOML(Tom's Obvious、Minimal Language)は、構成ファイルで使用される構造化文書形式です。構造化文書形式の行ベースのツールは、sed
実際には解析には適していません。これは、データが複数行(TOMLが「テーブル配列」をサポートしている)である可能性があり、部分的にはデータがエンコードされる可能性があるためです。
TOML認識ツールを使用すると、ファイルに安全にアクセスして変更できるだけでなく、非常に簡単です。
の一部tomlq
であるJSONパーサーの周りにTOMLパーサーラッパーを使用します。jq
yq
https://kislyuk.github.io/yq/
tomlq -t '.smtp.enabled |= true' file.ini
その後、TOMLファイルを読み取り、smtp
セクションのキーを新しい値で更新します。enabled
あなたの質問にデータが与えられた場合、出力は次のようになります。
[logs]
enabled = false
[smtp]
enabled = true
[system]
enabled = false
tomlq
このツールは、またはオプションを使用して「所定の位置」から変更することもできます。-i
--in-place