使用sed命令插入HTML代码时无法转义单引号的问题
解决sed命令中单引号保留问题
你的问题核心是sed脚本中嵌套单引号时的转义处理,原命令里的单引号被shell提前解析,导致写入文件时丢失。以下是两种可行的解决方法:
方法一:单引号拼接实现转义
在bash环境中,要在单引号包裹的字符串里插入单引号,可使用'\''的组合(结束当前单引号、插入单个单引号、重新开启单引号)。修改后的命令如下:
sed -i '122 i <button type="button" onclick="window.open('\''https://localhost:'$ctrl'\'','\''_blank'\'')">CTRL01</button>' SCP_PortForwarding.html
该组合会被shell解析为单个单引号,让sed能正确识别并写入目标文件。
方法二:改用双引号包裹sed脚本
如果用双引号包裹整个sed脚本,需对脚本内的双引号用\"转义,同时shell会自动解析双引号内的变量(如$ctrl)。命令如下:
sed -i "122 i <button type=\"button\" onclick=\"window.open('https://localhost:$ctrl','_blank')\">CTRL01</button>" SCP_PortForwarding.html
这种方式更直观,但需注意脚本内其他特殊字符不会被shell意外解析。
执行修改后的命令后,目标文件会生成符合预期的内容:
<button type="button" onclick="window.open('https://localhost:10941','_blank')">CTRL01</button>
内容的提问来源于stack exchange,提问作者Ranz
相关产品推荐
相关产品推荐

