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

例如:SSID=✀~!@#$%^&*[}(/.*尀尀/✀sed -i "s/ssid=.*/ssid=$SSID/" filename
2025-03-10 03:59:38
推荐回答(1个)
回答1:

假如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