.iniファイルの重複フィールドを置き換える

.iniファイルの重複フィールドを置き換える

こんにちは、私はこの分野が初めてなので少し待ってください。 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パーサーラッパーを使用します。jqyqhttps://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

おすすめ記事