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

如何在sed表达式中使用变量?替换文件行时遇未终止`s`错误

问题解决:sed替换时出现“unterminated `s'”错误

你的问题出在两个关键点:变量名大小写不匹配,以及df -h的输出包含换行符和sed替换用的分隔符,导致sed命令解析失败。

错误原因

  1. 变量名大小写错误:你定义的变量是New,但引用时用了${NEW},shell变量区分大小写,这会导致变量为空或未定义。
  2. 特殊字符破坏sed结构:df -h的输出包含换行符,会把sed命令拆分成多行,导致s命令未完成;如果输出里有你用的分隔符|,会提前终止替换规则,触发“unterminated `s'”错误。

解决方案一:修正sed写法并处理特殊字符

先对df -h的输出做转义处理,再执行替换:

# 定义变量并转义特殊字符:替换|为\|,换行符为\n
New=$(df -h | sed -e 's/|/\\|/g' -e ':a' -e 'N' -e '$!ba' -e 's/\n/\\n/g')

# 执行替换,注意变量名正确,且不需要g(整行匹配一次即可)
sed -ie "200s|^.*$|${New}|" "file.txt"

解决方案二:用awk更简单可靠

awk处理多行变量和特殊字符的兼容性更好,不需要额外转义:

New=$(df -h)
# NR==200时打印变量内容,其他行正常输出,最后覆盖原文件
awk -v new="$New" 'NR==200 {print new; next} 1' file.txt > temp.txt && mv temp.txt file.txt

补充说明

  • sed的-i参数在不同系统(比如macOS和Linux)语法可能有差异,Linux下是-i,macOS需要-i '',跨平台使用时要注意。
  • 替换整行时,^.*$已经匹配整个行内容,不需要g标志,多余的g不会报错但没必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:03:23