たとえば、「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
文字列name2
とcommand
それが探しているコマンドへの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
コマンドは出力を生成しません。