2016-07-27 52 views
-2

嗨,我正在使用一個文件下面的內容,我想打印shortversion的價值,搜索字符串的第一次出現在Linux發行其價值

{ 
    "app_versions": [ 
     { 
      "version": "15", 
      "shortversion": "0.0.15", 
      "title": "java expert", 
      "timestamp": 1469530069, 
      "appsize": 3436229, 
      "notes": , 
      "mandatory": false, 
      "external": false, 
      "device_family": null, 
      "id": 9, 
      "app_id": 356250, 
      "minimum_os_version": "4.1", 
      , 
      { 
       "version": "7", 
       "shortversion": "0.0.7", 
       "title": "java expert", 
       "timestamp": 1469528889, 
       "appsize": 3436225, 
       , 
       { 
        "version": "3", 
        "shortversion": "0.0.3", 
        "title": "javaExpert", 
        "timestamp": 1469209202, 
        "appsize": 3420965, 

我怎麼能打印的價值使用SED的短版第一次出現的,我已經使用了以下awk命令來獲得shortversion awk -F'"' '/\"shortversion\"/{print $10;}' read.version此命令生成的0.0.15這是正確的輸出,而是如何產生的文件動態,需要對這個

您的寶貴幫助
+1

請格式化您的問題:http://stackoverflow.com/editing-help – Sundeep

+0

爲什麼需要用sed ?爲什麼「文件被動態生成」很重要?你發佈的awk腳本不會產生你說的輸出n您發佈的輸入 - 您的問題在本身內部是準確和一致的。 –

+0

我認爲編輯應該倒過來,除非OP確認輸入確實是在單獨的行上提供的。原始帖子暗示輸入提供在一條長線上(因此使用'$ 10')。 – jas

回答

0

更模塊化使用命令行JSON解析器等jq解析你的JSON輸入。如果將來您的JSON對象樹發生變化,維護腳本會更容易。

你可以得到shortversionapp_versions陣列下面的第一個元素:

jq -r ". | .app_versions[1].shortversion" your_file.json 
+0

嗨馬特爾,感謝您的時間,我們可以得到,而無需使用JSON解析器 –

0

也許你可以改變一個限定詞 ':';例如 的awk -F 「:」「/ shortversion/{打印$ 2}'datafile ,然後用'sed'替換','和''';

+0

相同IDK的你與該想什麼,但是當你用awk,因爲AWK可以做任何事情的sed可以做你永遠不需要SED。 –

+0

我認爲我認爲不全面。應該是:awk -F「:」'/ shortversion/{gsub(/「|,/,」「,$ 2); print $ 2}'datafile 感謝您的建議 –

相關問題