我是脚本新手。
我有以下三个文件:
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
答案 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行。如果有,建议更好的解决方案。