2016-07-27 57 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 感谢您的建议 –

相关问题