2016-09-15 111 views
-1

我有一個運行qpid命令,它給我墊上,像這樣一個漂亮的印刷:AWK/SED追加到日誌文件

{ 
"value": { 
    "application": { 
     "connectionState": "Disconnected", 
     "connectionTime": "No connection was established", 
     "linkAttributes": { 
      "ackSettings": { 
       "dataAckEnabled": "true", 
       "dataAckTimeout": "5000", 
       "dataNakRetryLimit": "0", 
       "retransmitDelay": "500" 
      }, 
      "keepAliveSettings": { 
       "keepAliveAckTimeout": "5000", 
       "keepAliveInterval": "30000" 
      }, 
      "logTraffic": "false", 
      "port": "9999", 
      "role": "server" 
     }, 
     "protocol": "Class" 
    } 
}, 
"queueStats": {} 

我藉此輸出和剝離quitation標記以及括號然後我把它添加到一個日誌文件與下面的命令:

command | sed 's/"//g' | sed 's/{//g' | sed 's/}//g' | sed -e 's/$/\r/g' |awk '!/""/{ORS=(/},/?RS:""); gsub(/[[:blank:]]+/,""); sub(/}$/,"},\n"); print}' |awk '{gsub(/\\n/,"\n")}1' >> app.log 

結果如下:

^M^M^MendpointApplications:^MApplicationSide:^MconnectionState:Disconnected,^MconnectionTime:Noconnectionwasestablished,^MlinkAttributes:^MackSettings:^MdataAckEnabled:true,^MdataAckTimeout:5000,^MdataNakRetryLimit:0,^MretransmitDelay:500^M,^MkeepAliveSettings:^MkeepAliveAckTimeout:5000,^MkeepAliveInterval:30000^M,^MlogTraffic:false,^Mport:9999,^Mrole:server^M,^Mprotocol:ClassD^M^M,^MqueueStats:^M 

如何獲得每次我想將輸出追加到新行中的日誌中時,是否會刪除^ M個字符?

我預期的結果將是:

endpointApplications:ApplicationSide:connectionState:Disconnected,connectionTime:Noconnectionwasestablished,linkAttributes:ackSettings:dataAckEnabled:true,dataAckTimeout:5000,dataNakRetryLimit:0,retransmitDelay:500,keepAliveSettings:keepAliveAckTimeout:5000,keepAliveInterval:30000,logTraffic:false,port:9999,role:server,protocol:ClassD,queueStats: 

基本上相同的結果之前,但沒有^ M字,我想每次命令的結果追加到一個新的石灰。

+0

這些字符來自我每次嘗試添加到新行的嘗試。如果我一個接一個地追加沒有換行符,那麼這些字符就不存在了。 –

+3

不要使用sed解析JSON,請使用'jq' –

+0

Thanks Ed!拿出來,得到我想要的結果! –

回答

2

你的sed命令s/$/\r/正在注入它們。只是不要那樣做!