Shell脚本中使用sed命令无法通过变量替换字符串的问题求助
问题原因
- 变量名拼写错误:
- 读取用户名时定义的变量是
usernamert,后续组装链接时误写为usernamet,导致用户名变量取值为空 - 读取频道号时定义的变量是
channelt,后续组装链接时误写为channelt1,导致频道号变量取值为空
- 读取用户名时定义的变量是
- sed语法错误:
- 引号配对混乱:当前写的sed命令里双引号嵌套逻辑错误,shell解析时会出现语法错误,无法正常识别替换规则
- 特殊字符未转义:要生成的链接里包含
&符号,这个符号在sed的替换段是特殊保留字,代表原匹配到的完整内容,不转义的话会直接替换成原字符串,不会输出&本身
- 冗余写法:组装
t1变量时不需要用echo加子shell,直接赋值即可
修正方案
修正后的可正常运行脚本如下:
echo -n "Username: " read usernamert echo -n "Password: " read passwordt echo -n "IP: " read IPt echo -n "Channel: " read channelt # 直接赋值变量,同时提前转义t1里的&符号 t1="www://$usernamert:$passwordt@$IPt/TEST/SOMETHING?channel=$channelt&TRUE=1" t1=${t1//&/\\&} # 正确写sed的替换规则,引号配对正确 sed -i "s+\"t_1\", \"t_2\"+\"$t1\", \"AAA\"+g" test.txt
如果是在macOS系统执行,需要把sed -i改成sed -i ''
内容的提问来源于stack exchange,提问作者Jason D
相关产品推荐
相关产品推荐

