2017-04-24 2 views
4

JSONから部分文字列を取得する必要があります。以下のJSONドキュメントでは、jq '.[].networkProfile.networkInterfaces[].id'という値の最後が必要です。つまり、A10NICvw4konls2vfbw-dataだけを別のコマンドに渡す必要があります。私はgrepを使って部分文字列を引く方法を理解していないようです。私は正規表現の例をそこに見せているが、成功していない。あなたのケースではLinux CLI - JSONからの部分文字列の取得方法jq + 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" 
     } 
     ] 
    } 
    } 
] 
+0

4つの空白を使用してコード/データの前に付けます。 [edit-help](http://stackoverflow.com/editing-help)を見てください。 – Cyrus

答えて

3

*貪欲であるとして、sub(".*/";"")は、トリックを行います:

.[].networkProfile.networkInterfaces[].id | sub(".*/";"") 
3

はこれを試してみてください:

jq -r '.[]|.networkProfile.networkInterfaces[].id | split("/") | last' 

-rは "生" で出力を印刷するJQを伝えますform - この場合、文字列の値を二重引用符で囲まないことを意味します。 jq発現用として

、あなたが欲しいidにアクセスした後、split("/")て(まだjq内)、それをパイプするとスラッシュの間の部分の配列に変換します。 last関数(ありがとう@Thor)を介してパイプすると、配列の最後の要素だけが返されます。

+0

それはうまくいった!ありがとうございました! – Adoyt

+1

または '。[] | .networkProfile.networkInterfaces []。id |分割( "/")|最後に。 – Thor

+0

これはもっと明確です。窃盗。 –

1

あなたがここにgrepでそれをしたい場合は、一つの方法です:

jq -r '.[].networkProfile.networkInterfaces[].id' | grep -o '[^/]*$' 

は出力:

A10NICvw4konls2vfbw-data 
関連する問題