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

如何使用sed命令在文件中写入\n字符?

解决Sed替换时保留\n原字符的问题

我明白你遇到的痛点了——用sed替换字符串时,本来想保留\n这两个字符,结果被解析成了实际的换行,导致输出和预期不符。咱们一步步来解决这个问题:

问题回顾

你的示例代码:

string="status=\"translated\">NIRANJAN\\nKUMAR"
sed -i 's/status="translated">/'"$string"' /g' text.txt

目标文件text.txt原有内容:status="translated">Fixes
当前输出(\n变成了换行):

status="translated">NIRANJAN KUMAR

期望输出:status="translated">NIRANJAN\nKUMAR

问题根源

这里的核心是Shell和sed对转义字符的双重解析:

  1. Shell会先把变量里的\\n解析成\n
  2. sed接收到\n后,会把它当成换行符处理,而不是保留原字符

所以我们要做的是,让sed最终拿到\\n,这样它才会把\\解析成单个\,从而保留\n。

解决步骤

下面是几种可行的解决方案,你可以根据需求选择:

方案1:修改变量中的转义字符

把变量里的\\n改成\\\\n,这样Shell解析后会变成\\n,sed处理时就会保留\n:

string="status=\"translated\">NIRANJAN\\\\nKUMAR"
sed -i 's/status="translated">/'"$string"'/g' text.txt

方案2:用printf处理转义,避免Shell解析

如果不想修改变量的写法,可以用printf来输出字面量的\n,确保sed拿到正确的内容:

string='status="translated">NIRANJAN\nKUMAR'
sed -i "s/status=\"translated\">/$(printf '%s' "$string")/g" text.txt

方案3:直接在sed命令中写\\n

如果变量的内容不需要复用,也可以直接在sed的替换字符串里写\\n,这样sed会直接解析成\n:

sed -i 's/status="translated">/status="translated">NIRANJAN\\nKUMAR/g' text.txt

验证结果

执行上述任意方案后,text.txt的内容都会变成你期望的:

status="translated">NIRANJAN\nKUMAR

注意事项

如果你用的是macOS的BSD sed(而非Linux的GNU sed),-i选项需要加一个空参数,比如:

sed -i '' 's/.../.../g' text.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:13:03