2016-07-27 1 views
-2

Hallo Ich bin der unterhalb des Inhalts in einer Datei verwenden, möchte ich den Wert von shortversion gedruckt werden,Suche nach ersten Vorkommen eines Strings und auszudrucken, um den Wert in 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, 

Wie kann ich den Wert drucken des ersten Vorkommens der kurzen Version, die sed verwendet, habe ich den folgenden awk Befehl verwendet, um die shortversion zu erhalten awk -F'"' '/\"shortversion\"/{print $10;}' read.version dieser Befehl erzeugt Ausgabe von 0.0.15, die korrekt ist, aber die Akte wird dynamisch erzeugt, benötigt Ihre wertvolle Hilfe auf diesem

+1

formatieren Sie bitte Ihre Frage: http://StackOverflow.com/Editing-Help – Sundeep

+0

Warum muss es mit Sed sein Warum wird "die Datei dynamisch generiert?" Das von Ihnen gepostete awk-Skript wird nicht die Ausgabe produzieren, die Sie angeben n die Eingabe, die Sie gepostet haben - [Bearbeiten] Ihre Frage, um in sich genau und konsistent zu sein. –

+0

Ich denke, die Bearbeitung sollte umgekehrt werden, und bis OP bestätigt, dass die Eingabe tatsächlich in separaten Zeilen bereitgestellt wird. Der ursprüngliche Post impliziert, dass die Eingabe auf einer langen Zeile bereitgestellt wird (daher die Verwendung von $ 10). – jas

Antwort

0

Es ist modularer, einen Befehlszeilen-JSON-Parser wie jq zu verwenden um Ihre JSON-Eingabe zu analysieren. Es wäre einfacher, Ihr Skript zu pflegen, falls sich Ihre JSON-Objektstruktur in Zukunft ändern sollte.

Sie shortversion für das erste Element des app_versions Array mit dem folgenden erhalten können:

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

Hallo Martel, danke für deine Zeit, können wir das gleiche ohne json parser –

0

Vielleicht können Sie einen Qualifizierer ändern ':'; zB awk -F ":" ‚/ shortversion/{ Drucken $ 2} 'Datafile und dann' sed 'zu ersetzen', 'und' "';

+0

idk bekommen, was du damit denkst, aber du brauchst nie sed, wenn du awk verwendest, da awk alles tun kann, was sed tun kann. –

+0

Ich denke, ich halte nicht umfassend. sollte sein: awk -F:: '/ shortversion/{gsub (/ "|, /," ", $ 2); drucke $ 2}' Datendatei danke für deinen Rat –

Verwandte Themen