2016-08-23 202 views
1
格式化

我寫bash腳本形成JSON文件:字符串猛砸

#!/bin/bash 

json_string=$(<product.info.json) 
echo "$json_string" 

vers=%major_version%.%patch_version% 
date=`date +%%Y-%%m-%%d:%%H:%%M:%%S` 

echo VERSION: $vers 
echo DATE: $date 

result_string=$json_string 
result_string=${result_string/_DATE_/$date}; 
result_string=${result_string/_VERSION_/$vers}; 


echo "$result_string" > "User_Part/product.info.json" 

json_string=$(<User_Part/product.info.json) 
echo "$json_string 

它的控制檯進行:

[14:09:26][Step 4/4] { 
[14:09:26][Step 4/4] "release":{ 
[14:09:26][Step 4/4]  "version":null 
[14:09:26][Step 4/4] }, 
[14:09:26][Step 4/4] "product":{ 
[14:09:26][Step 4/4]  "group":"CMS", 
[14:09:26][Step 4/4]  "name":"CMS_prod", 
[14:09:26][Step 4/4]  "version":"_VERSION_" 
[14:09:26][Step 4/4] }, 
[14:09:26][Step 4/4] "application":{ 
[14:09:26][Step 4/4]   "name":"OAPI", 
[14:09:26][Step 4/4]   "appl_id":"6150", 
[14:09:26][Step 4/4]   "version":"_VERSION_", 
[14:09:26][Step 4/4]   "date":"_DATE_", 
[14:09:26][Step 4/4]   "detail":null, 
[14:09:26][Step 4/4]   "vcs":{ 
[14:09:26][Step 4/4]    "hash":null, 
[14:09:26][Step 4/4]    "branch":null 
[14:09:26][Step 4/4]   }, 
[14:09:26][Step 4/4]   "build":{ 
[14:09:26][Step 4/4]    "number":null, 
[14:09:26][Step 4/4]    "url":null 
[14:09:26][Step 4/4]   } 
[14:09:26][Step 4/4]  } 
[14:09:26][Step 4/4] } 
[14:09:26][Step 4/4] VERSION: 003.09 
[14:09:26][Step 4/4] DATE: 2016-08-23:14:09:26 
[14:09:26][Step 4/4] { 
[14:09:26][Step 4/4] "release":{ 
[14:09:26][Step 4/4]  "version":null 
[14:09:26][Step 4/4] }, 
[14:09:26][Step 4/4] "product":{ 
[14:09:26][Step 4/4]  "group":"CMS", 
[14:09:26][Step 4/4]  "name":"CMS_prod", 
[14:09:26][Step 4/4]  "version":"003.09" 
[14:09:26][Step 4/4] }, 
[14:09:26][Step 4/4] "application":{ 
[14:09:26][Step 4/4]   "name":"OAPI", 
[14:09:26][Step 4/4]   "appl_id":"6150", 
[14:09:26][Step 4/4]   "version":"_VERSION_", 
[14:09:26][Step 4/4]   "date":"2016-08-23:14:09:26", 
[14:09:26][Step 4/4]   "detail":null, 
[14:09:26][Step 4/4]   "vcs":{ 
[14:09:26][Step 4/4]    "hash":null, 
[14:09:26][Step 4/4]    "branch":null 
[14:09:26][Step 4/4]   }, 
[14:09:26][Step 4/4]   "build":{ 
[14:09:26][Step 4/4]    "number":null, 
[14:09:26][Step 4/4]    "url":null 
[14:09:26][Step 4/4]   } 
[14:09:26][Step 4/4]  } 
[14:09:26][Step 4/4] } 

DATE設置,但VERSION不,我不能理解爲什麼。請幫我解決這個問題。

也許有更美麗的方式來做到這一點,腳本在TeamCity中的構建代理服務器中執行。

+0

我看到了[[14:09:26] [步驟4/4]版本:003.09'。那麼這意味着VERSION沒有設置?另外,你知道['jq'](https://stedolan.github.io/jq/)嗎?它是一個在shell腳本中解析JSON的工具。對你來說,這可能比你寫的這個腳本更有用。 – fedorqui

+0

我無法使用jq,因爲我無法將其安裝在服務器中。我的意思是「版本」:第二行中的「_ VERSION_」。近至今。 –

+0

好的,我明白了。試着簡化你的例子,並提供一個[mcve]的內容'product.info.json' – fedorqui

回答

1

它看起來像您要執行兩次_VERSION_替代,似乎第一次換人是成功的,但默認情況下使用的是隻執行一次替換bash的PARAM擴張,嘗試

result_string=${result_string//_VERSION_/$vers}; 

這將產生替代g標誌的效果 - 在正則表達式中說。

+0

謝謝。我意識到了這個問題。它是 '//'。 –

+0

很高興你把它修好了,有什麼奇怪的是,爲了找出我的解決方案,我不得不復制你的問題,只是猜測,並檢查'//'可能會使其行爲更「貪婪」,像其他參數擴展一樣。 bash手冊沒有幫助*如果模式以/開頭,模式的所有匹配項都用字符串替換\t替換爲 \t。 \t通常只有第一場比賽是 \t取代。* –