我需要更改js文件的内容config.js该文件包含的值如下:
dev:'https://api-beta.com'
content_bucket_name: 'content-beta'我想使用shell脚本更改此内容并保存该文件。更改后的内容可能如下所示:
dev:'https://api-production.com'
content_bucket_name: 'live-bucket'如何通过shell脚本执行此操作?
config.js
unifiedTest.constant('CONFIG', {
env : 'dev',
api : {
dev : 'https://api-beta.com',
},
content_bucket_name :"content-beta",
});我尝试过的shell脚本
#!/bin/bash
file=config.js
content_bucket_name=$1
dev=$2
sed -i -e "s/\(content_bucket_name=\).*/\1$1/" \
-e "s/\(dev=\).*/\1$3/" 发布于 2015-10-22 12:47:05
您遇到的问题与这样一个事实有关,即一个字符串中包含/,因此您得到了s/\(dev=\).*/\1https://api-production.com/,它有太多的/分隔符。您有许多选择,但这里是最有意义的两个:
awk (插入换行符以提高可读性):awk -v name="$1“-v url="$3”‘/content_bucket_name[:space:]* :.* / { /*将出现的一个:.*替换为:"{name}“。*/ sub(/ :.* /,":\"“名称"\"") }/dev[:空格:]*:.*/{ /*将出现的一个:.*替换为:"{url}”。*/ sub(/:.*/,":\"“URL "\"") }‘
| (希望url中没有该分隔符;:、/、'?’、';‘、&和#通常是替代URL的糟糕选择):"s|(dev[:space:]*).*|\1'$3'|" -i \ -e“s|(content_bucket_name[:空格:]*).*|\1‘$1’|”\ -e空格
请注意,我更改了替换表达式以使用:而不是=,因为这是实现JSON的替换所必需的。
发布于 2020-02-28 14:18:44
sed -i 's#dev : .*#dev : '"'https://api-production.com'",'#' config.js
sed -i 's#content_bucket_name:.*#content_bucket_name:''"live-bucket"','#' config.jshttps://stackoverflow.com/questions/33273323
复制相似问题