在sed命令

时间:2016-11-21 07:37:51

标签: bash shell sed

使用BashSED我正在尝试使用网址替换js文件中的两个字符串。

当我运行.sh脚本时,应插入的两个url是输入参数。

./deploy.sh https://hostname.com/a/index.html https://hostname2.com/test

但是要在我的sed命令中使用它,我必须使用:\\转义所有正斜杠?

./deploy.sh https:\\/\\/hostname.com\\/a\\/index.html https:\\/\\/hostname2.com\\/test

如果它们被转义,则此SED命令适用于Mac OSX Sierra

APP_URL=$1
API_URL=$2

sed "s/tempAppUrl/$APP_URL/g;s/tempApiUrl/$API_URL/g" index.src.js > index.js

现在我不希望将转义的URL作为参数插入,我希望它自己的脚本能够转义正斜杠。

这是我尝试过的:

APP_URL=$1
API_URL=$2

ESC_APP_URL=(${APP_URL//\//'\\/'})
ESC_API_URL=(${API_URL//\//'\\/'})

echo 'Escaped URLS'
echo $ESC_APP_URL
#Echos result: https:\\/\\/hostname.com\\/a\\/index.html 
echo $ESC_API_URL
#Echos result: https:\\/\\/hostname2.com\\/test

echo "Inserting app-URL and api-URL before dist"
sed "s/tempAppUrl/$ESC_APP_URL/g;s/tempApiUrl/$ESC_API_URL/g" index.src.js > index.js

params看起来一样,但在这种情况下,SED会抛出错误

sed: 1: "s/tempAppUrl/https:\\/\ ...": bad flag in substitute command: '\'

有人能告诉我这里的区别吗?字符串看起来相同,但结果不同。

1 个答案:

答案 0 :(得分:48)

我建议更换

sed "s/regex/replace/" file

sed "s|regex|replace|" file

如果你的sed支持它。然后就不再需要逃避斜线了。

s后面的字符确定哪个字符是分隔符,它必须在s命令中出现三次。