zsh下gsed替换文本如何保留单引号格式正确引用shell变量
zsh下gsed替换引入shell变量的正确方案
错误原因
你之前的命令有两处问题:
- 替换段变量
$i前多写了一个反斜杠,这个反斜杠会被sed作为普通字符输出,直接导致结果里600前多出多余反斜杠 - 命令中出现的
"是HTML转义字符,在shell命令里无实际作用,属于冗余内容
正确命令
完全保留sed脚本两侧使用单引号的书写格式,只需在插入变量的位置临时断开单引号即可:
i=600 gsed 's/\\\[Omega]BD=.*/\[Omega]BD='"$i"';/' text_to_modify.txt
执行后目标行会被替换为\[Omega]BD=600;,符合预期。
写法说明
- sed脚本主体全部放在单引号内,避免shell提前解析sed的转义字符,匹配你要求的书写格式
- 写到需要插入变量的位置时,先输入
'闭合前面的单引号,紧跟双引号包裹的"$i"读取变量值(双引号可兼容变量值含空格的场景,避免解析异常),之后再输入'重新打开单引号,写完剩余的sed脚本即可 - 不要在变量引用位置额外添加无意义的反斜杠,就不会产生意外的转义字符
内容的提问来源于stack exchange,提问作者user1773603
相关产品推荐
相关产品推荐

