2016-07-27 3 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 parser, например jq для анализа вашего входа JSON. Было бы проще поддерживать ваш скрипт в случае изменения дерева объектов JSON в будущем.

Вы можете получить shortversion для первого элемента вашего app_versions массива со следующим:

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

Привет, Martel, спасибо за ваше время, можем ли мы получить то же самое без использования json parser –

0

Может быть, вы можете изменить спецификатор «:», например AWK -F «:» «/ shortversion/{ напечатайте $ 2} 'datafile , а затем используйте' sed 'для замены', 'и' '';

+0

idk, что вы думаете об этом, но вам никогда не нужно sed, когда вы используете awk, поскольку awk может делать что-нибудь, что может сделать sed. –

+0

Я думаю, что считаю не всеобъемлющим. должен быть: awk -F ":"/shortversion/{gsub (/ "|, /," ", $ 2); print $ 2} 'datafile благодарю вас за консультацию –

Смежные вопросы