外部ツールを使用せずにyamlファイルを解析する

外部ツールを使用せずにyamlファイルを解析する

私は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_namename: 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。質問自体の内容を編集したわけではありません。

おすすめ記事