私はBashを初めて使用するときにyamlファイルでいくつかの動的パラメータを更新する必要があるという問題に遭遇しました。
クエリ()によると、search4.subsearch1.name
更新する必要があります。
name: old_name
入力する
name: new_name
- サンプルファイルは次のとおりです。
search1: name: name1 pass: pass1 date: date1 #these are just commented texts search2: #Adding few more commented lines myname: somename name: name2 pass: pass2 someotherparam: param1 search3: nameAndSurname: NS namingConv: true varSet: P3 search4: #Again adding some special name: strings here myname: somename1 name: new_name pass: new_pass ptherparam1: T3 subsearch1: #Again adding some special name strings here myname: somename2 name: old_name pass: pass2 ptherparam1: param3 search5: #Again adding some special name strings here var1: value1 name: some_name pass: some_pass
したがって、クエリ()に基づいて次にsearch4.subsearch1.name
更新する必要があります。name: old_name
name: new_name
- 予想出力:
search4: #Again adding some special name: strings here myname: somename1 name: new_name pass: new_pass ptherparam1: T3 subsearch1: #Again adding some special name strings here myname: somename2 name: new_name pass: pass2 ptherparam1: param3
試してみましたがawk
成功sed
しませんでした。
lineNR=$(awk "/\<search4:/{f=1} f && /\<name:/ {print NR; exit}" testfile.txt);sed "${lineNR}s/name.*/name: new_name/" testfile.txt
ベストアンサー1
あなたが持つことができると仮定マイクパラyq
ダウンロードしてインストールすると、プロセスが簡単になります。
yq eval '.search4.subsearch1.name = "new_name"' file.yml
私はあなたが言ったことに気づきました。コメントそれ」私たちはインターネットに接続されておらず、対応するLinuxボックスには外部パッケージは許可されていません。自分自身がパッケージを追加できない場合でも、これらのシステムにソフトウェアを追加するように要求する管理プロセスがあります。「変更要求」かもしれません。サポートしやすい
テストのためにインデントが入っていることを確認するためにコンテンツを編集する必要がありましたsearch4
。質問自体の内容を編集したわけではありません。