JSONから部分文字列をプルする必要があります。以下のJSONドキュメントでは、jq '.[].networkProfile.networkInterfaces[].id'
の値の終わりが必要です。つまり、別のコマンドに渡すにはA10NICvw4konls2vfbw-data
だけが必要です。 grepを使用して部分文字列をプルする方法がわからないようです。私はそこに正規表現の例があるように見えますが、それらで成功していません。
[
{
"id": "/subscriptions/blah/resourceGroups/IPv6v2/providers/Microsoft.Compute/virtualMachines/A10VNAvw4konls2vfbw",
"instanceView": null,
"licenseType": null,
"location": "centralus",
"name": "A10VNAvw4konls2vfbw",
"networkProfile": {
"networkInterfaces": [
{
"id": "/subscriptions/blah/resourceGroups/IPv6v2/providers/Microsoft.Network/networkInterfaces/A10NICvw4konls2vfbw-data",
"resourceGroup": "IPv6v2"
}
]
}
}
]
あなたの場合、*は貪欲なので、sub(".*/";"")
がトリックを実行します。
.[].networkProfile.networkInterfaces[].id | sub(".*/";"")
これを試して:
_jq -r '.[]|.networkProfile.networkInterfaces[].id | split("/") | last'
_
_-r
_は、出力を「生の」形式で出力するようにJQに指示します。この場合、文字列値を二重引用符で囲むことはありません。
jq
式については、必要なid
にアクセスした後、split("/")
を介して(まだjq
内に)パイプすると、次の配列になります。スラッシュの間の部分。 last
関数(ありがとう、@ Thor)を介してそれをパイプすると、配列の最後の要素だけが返されます。
grep
でそれを行いたい場合は、次の1つの方法があります。
jq -r '.[].networkProfile.networkInterfaces[].id' | grep -o '[^/]*$'
出力:
A10NICvw4konls2vfbw-data