shell脚本 将一个含特殊字符的变量,写入文件对应的位置中,使用sed要么写入的字符不正确要么就报错

例如:SSID='~!@#$%^&*[}(/.*\\/'sed-i"s/ssid=.*/ssid=$SSID/"filename... 例如:
SSID='~!@#$%^&*[}(/.*\\/'
sed -i "s/ssid=.*/ssid=$SSID/" filename
展开
 我来答
charleszhangji
2016-10-11 · TA获得超过4554个赞
知道小有建树答主
回答量:887
采纳率:0%
帮助的人:959万
展开全部

假如SSID变量中没有&这个特殊符号,那么直接用sed是可以满足的

SSID='~!@#$%^*[}(/.*\\/'
sed -i s,ssid=.*,ssid=$SSID,g filename

但是如果有了&符号,放到sed中会作为特殊用途展开,导致保留了原来的匹配字符,写入的内容会不正确。

此时,只能换一种方式,用awk来操作字符串,然后重新写入到文件中,此时需要多一个临时文件

cp filename filename1; 
awk '{gsub("^ssid=.*","ssid='$SSID'");print $0}' filename1 >filename ; 
rm -f filename1
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式