テキストファイルの特定の行からバージョンを抽出してコマンドとして使用したいと思います。

テキストファイルの特定の行からバージョンを抽出してコマンドとして使用したいと思います。

たとえば、「somefile.json」ファイルのテキストは次のようになります。

{
  "dependencies": {
    "name1": "text1#version1",
    "name2": "text2#version2",
    "name3": "text3#version3"
  },
  "wont-need-to-get-versions-from-here": [
    {
      "randomtext": "randomtext",
      "randomurl": "randomurl",
      "scopes": [
        "randomscope"
      ]
    }
  ]
}

"version2"私の助けを借りて、"name2"コマンドがあればコマンドの拡張として使用したいと思います。"command"それを得た後は"version2"なければなりません"command#version2"。たぶん、このコマンドと抽出をいくつ"version2"かの.shファイルに書き込む必要がありますか? (愚かな質問だったらすみません)

ベストアンサー1

文字列name2commandそれが探しているコマンドへの2つの入力で、質問のドキュメントが提供されたら、command#version2この文字列を使用してクエリ結果を取得したいとします。

このjqコマンドは、JSON文書を照会または変更するために使用されます。次のコマンドは、dependenciesキーが文字列name2(またはシェル変数に文字列として指定されているすべての項目key)に対応する子オブジェクトから値を抽出します。最初の文字#の前の値部分をcommand(またはシェル変数で指定されたすべてのものcmd)で置き換えます。必要に応じて、結果の文字列が復号され、標準出力ストリームとして印刷されます。

key='name2'
cmd='some command'

jq -r --arg key "$key" --arg cmd "$cmd" \
    '.dependencies[$key] // empty | sub("^[^#]*"; $cmd)' somefile.json

問題の文書が与えられると、上記の内容が生成されます。

some command#version2

dependencies子オブジェクトのキーが指定された値と一致しない場合、この$keyコマンドは出力を生成しません。

おすすめ記事