You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sed替换字符串时\n反斜杠丢失,如何实现预期输出?

问题场景
  • 现有a.txt内容:
    ^variable=test\n
    
  • 编写的a.sh脚本内容:
    #!/bin/ksh  
    string=aAxdf\ndafsfasdf\n   
    sed -i '/\^variable=/c\^variable='"$string"'' a.txt
    
  • 执行脚本后,a.txt内容丢失反斜杠:
    ^variable=aAxdfndafsfasdfn
    
  • 期望输出:
    ^variable=aAxdf\ndafsfasdf\n 
    
问题原因
  1. 在ksh中,未加引号的字符串里的\n会被shell解析为换行符,无法保留字面意义;即便用双引号包裹,\n仍会被shell处理,反斜杠无法直接留存。
  2. sed的c命令中,反斜杠属于特殊字符,需要额外转义才能被识别为字面反斜杠。
解决方法

修改脚本,对字符串中的反斜杠做双重转义,同时调整sed语法:

#!/bin/ksh  
# 用单引号包裹字符串避免shell解析,把需要保留的\n写成\\n
string='aAxdf\\ndafsfasdf\\n'   
# 用双引号包裹变量展开,确保sed能正确识别转义后的内容
sed -i '/\^variable=/c\^variable='"$string"'' a.txt

说明

  • 变量string用单引号包裹,阻止shell解析内部转义字符;将目标\n写为\\n,变量展开后会生成字面意义的\n。
  • sed的c命令后,用双引号包裹$string完成变量展开,此时变量里的\\n会被sed解析为\n,最终写入文件的内容就能保留反斜杠。

执行修改后的脚本,a.txt即可得到期望内容。

内容的提问来源于stack exchange,提问作者user1894029

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:35:16