2016-08-23 140 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取代。* –