在JSON文件中查找和替换

时间:2018-07-25 01:35:04

标签: shell scripting

我是脚本新手。

我有以下三个文件:

Availability.json
Source URLs.txt
Target URLs.txt

我的要求是我需要搜索Source URLs.txt中存在的URL,并将它们替换为Availability.json文件中的Target URLs.txt。

我们如何在shell脚本中实现这一目标?我们有大约50个网址。

内容: Availability.json

"drillDownUrl": "https://appdync-mex-cgn-2u.mex.group.net:8090/controller/#/location=METRIC_BROWSER&timeRange=last_30_minutes.BEFORE_NOW.-1.-1.180&application=1000&metrics=APPLICATION_COMPONENT.647.4743559",

         "label": null,
        "description": null,
        "drillDownUrl": "https://appdync-mex-cpo-7u.mex.group.net:8090/controller/#/location=METRIC_BROWSER&timeRange=last_30_minutes.BEFORE_NOW.-1.-1.180&application=1&metrics=APPLICATION_COMPONENT.647.474",

Source_URLs.txt

 https://appdync-mex-cgn-2u.mex.group.net:8090/controller/#/location=METRIC_BROWSER&timeRange=last_30_minutes.BEFORE_NOW.-1.-1.180&application=1000&metrics=APPLICATION_COMPONENT.647.4743559

https://appdync-mex-cpo-7u.mex.group.net:8090/controller/#/location=METRIC_BROWSER&timeRange=last_30_minutes.BEFORE_NOW.-1.-1.180&application=1&metrics=APPLICATION_COMPONENT.647.474

Target_URLs.txt:

https://www.apdyn.com/Application#=12
https://www.appdyn.com/Application#=123

2 个答案:

答案 0 :(得分:1)

更新版本-建议使用readarray,sed中的分隔符现在为|。我用了你的文件名。请删除Source_URLs.txt

中的空白行和前导空格
readarray -t SRC < Source_URLs.txt
echo "${SRC[1]}"

readarray -t TRGT < Target_URLs.txt
echo "${TRGT[1]}"

for (( i=0; i<${#SRC[@]}; i++ ));
do
  sed -i "s|${SRC[$i]}|${TRGT[$i]}|g" Availability.json
done

注意:您的Availability.json无效-最后一个字符为,,有重复的密钥,没有对象-在https://jsonformatter.curiousconcept.com/中进行检查

答案 1 :(得分:0)

将您的网址加载到数组中(检查https://stackoverflow.com/a/11393884/2235381),具体取决于您的操作系统IFS可能会有所不同。

IFS=$'\r\n' GLOBIGNORE='*' command eval  'SRC=($(cat src.txt))'
echo "${SRC[0]}"

IFS=$'\r\n' GLOBIGNORE='*' command eval  'TRGT=($(cat trgt.txt))'
echo "${TRGT[0]}"

备份您的json,然后使用sed -i遍历数组,例如:

for (( i=0; i<${#SRC[@]}; i++ ));
do
  sed -i "s/${SRC[$i]}/${TRGT[$i]}/g" your.json
done

我知道这有点蛮力,但是可以50行。如果有,建议更好的解决方案。