如何使用sed查找并替换为特殊字符?

时间:2018-07-18 16:19:49

标签: macos sed

我想用'100.45.9.147'替换IP $(cat apiServer.txt)。 非就地更新有效,但是当我尝试使用sed的就地更新时,出现错误:-

$ sed“ s /'100.45.9.147'/ \ $(cat apiServer.txt)/ g” checkNTP.sh

echo -e "\n"
apiServer=$(cat apiServer.txt)
usertoken=$(cat tokenfile.txt)
curl -k  -H "Authorization: Bearer ${usertoken}" -H 'Content-Type: application/json' "https://${apiServer}/configapi/v1/SystemSettingsNTP"

echo -e "\n\n"

$ sed -i“ s /'100.45.9.147'/ \ $(cat apiServer.txt)/ g” checkNTP.sh

sed: 1: "checkNTP.sh": command c expects \ followed by text

这是checkNTP.sh的内容

echo -e "\n"
apiServer='100.45.9.147'
usertoken=$(cat tokenfile.txt)
curl -k  -H "Authorization: Bearer ${usertoken}" -H 'Content-Type: application/json' "https://${apiServer}/configapi/SystemSettingsNTP"

echo -e "\n\n"

2 个答案:

答案 0 :(得分:0)

-i ''开关下面使用可解决这种情况:

sed -i '' "s/'10.45.9.147'/\\$\\(cat apiServer.txt\\)/g" fileName.txt

答案 1 :(得分:0)

这可能对您有用(GNU sed):

sed 's/'\''100\.45\.9\.147'\''/$(cat apiServer.txt)/' file

最好通过从外壳引号中戳出单引号,这样可以使除元字符以外的所有其他字符都可以表示自己,并且元字符可以用普通引号引起来,例如.必须加引号\.,否则仅代表一个字符。

如果您想让shell变量再次替换文本,请在shell中戳一个孔,并将变量双引号引起来,以留出可能的空白。还请记住,如果变量包含元字符,则应事先将其引号,否则替换命令可能会导致sed语法错误。通常,当变量中包含与替换定界符冲突的字符时,通常是/