2016-03-07 130 views
0

我有一個從JSON文件創建的hocon配置。我需要分析以下hocon和提取值使用shell腳本解析hocon文件

樣本hocon文件:從這個hocon文件我想提取的VM-ARGS sample.json

nodes=[ 
    { 
     host=myhostname 
     name=myhostname 
     ports { 
      # debug port 
      debug=9384 
      # http Port on which app running 
      http=9380 
      # https Port on which app running 
      https=9381 
      # JMX port 
      jmx=9383 
     } 
     type=app 
     vm-args=[ 
      "-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintClassHistogram", 
      "-XX:+UseConcMarkSweepGC -XX:+UseParNewGC ", 
      "-XX:+UseTLAB -XX:CMSInitiatingOccupancyFraction=80 -XX:+ExplicitGCInvokesConcurrent -verbose:gc", 
      "-XX:SurvivorRatio=8 -XX:+UseNUMA -XX:TargetSurvivorRatio=80 -XX:MaxTenuringThreshold=15", 
      "-Xmx3200m -Xms3200m -XX:NewSize=1664m -XX:MaxNewSize=1664m -Xss1024k", 
      "-server" 
     ] 
    } 
] 
profile=java-dev 
resources { 
cfg-repository { 
    branch-name=master 
    commit-id=HEAD 
    password=sigma123 
    url="http://localhost:9890/gitcontainer/demo-cfg" 
    username=sadmin 
} 
databases=[ 
    { 
     connection-string="oracle03:1522:si12c" 
     name=cm 
     password=coresmp601 
     username=coresmp601cm 
    }, 
    { 
     connection-string="oracle03:1522:si12c" 
     name=am 
     password=coresmp601 
     username=coresmp601am 
    } 
] 
idp { 
    url="https://sohanb:8097/idp" 
} 
keystores=[ 
    { 
     file-location="/home/smp/runtime/ssl" 
     name=identity 
     passphrase=kspass 
    } 
] 
admin { 
    password=sigma123 
    url="http://punws-sohanb.net:9002/" 
    username=sadmin 
} 
} 

現在。 我已經嘗試了不同的bash工具和sed/awk命令,但沒有運氣。

請建議!

回答

1

awk來救援!

$ awk 'p&&$0~/"/{gsub("\"","");print} /vm-args/{p=1} ' hoconfile 

      -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintClassHistogram, 
      -XX:+UseConcMarkSweepGC -XX:+UseParNewGC , 
      -XX:+UseTLAB -XX:CMSInitiatingOccupancyFraction=80 -XX:+ExplicitGCInvokesConcurrent -verbose:gc, 
      -XX:SurvivorRatio=8 -XX:+UseNUMA -XX:TargetSurvivorRatio=80 -XX:MaxTenuringThreshold=15, 
      -Xmx3200m -Xms3200m -XX:NewSize=1664m -XX:MaxNewSize=1664m -Xss1024k, 
      -server 

從那裏您可以根據需要進行格式化。根據你需要額外的邏輯來終止打印的兩個區塊之間添加/]/{p=0}作爲更新的輸入文件

UPDATE :

$ awk 'p&&$0~/"/{gsub("\"","");print} /]/{p=0} /vm-args/{p=1}' file 

可以管道輸出到tr -d ',' | tr -s ' '刪除逗號和擠壓的空間,或者在awk腳本中執行相同的操作。

說明:模式匹配「vm-args」設置標誌(p = 1)。如果該標誌被設置並且該行包括引號,則打印該行,如果該行匹配以關閉方括號(]),則將該標誌設置爲關(p = 0),如果沒有更多「vm-args」匹配文件。

更新:我稍微更改了代碼,現在將這些行連接成一個,搜索主機名,修剪額外的字符用tr和sed完成。

$ awk 'p && $0~/"/ {args=args $0 FS} 
     p && $0~/]/ {print args; exit} 
/name=myhostname/ {h=1} 
    h && /vm-args/ {p=1}' file | 
tr -d '",' | 
tr -s ' ' | 
sed 's/^ //' 

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintClassHistogram -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseTLAB -XX:CMSInitiatingOccupancyFraction=80 -XX:+ExplicitGCInvokesConcurrent -verbose:gc -XX:SurvivorRatio=8 -XX:+UseNUMA -XX:TargetSurvivorRatio=80 -XX:MaxTenuringThreshold=15 -Xmx3200m -Xms3200m -XX:NewSize=1664m -XX:MaxNewSize=1664m -Xss1024k -server 
+0

我剛剛編輯了hocon文件,輸出現在很糟糕。 – Sohan

+0

現在看起來不錯,命令工作正常,最後一件事是我缺少的是用whilespace替換逗號分隔值。因爲這我必須作爲vmargs傳遞給其他腳本 – Sohan

+0

我做了簡單的sed命令的工作。正常工作謝謝!如果你可以在awk命令的部分內容中找到答案,那將會很棒。 – Sohan