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

使用sed命令删除指定文本中的单引号不生效如何解决?

问题根因
  1. 转义规则错误:你用双引号包裹sed的替换规则时,对单引号做了不必要的转义。双引号内单引号不是特殊字符,不需要加\转义,加了之后反而会让bash把\'作为字面内容传给sed,导致sed需要匹配的是带反斜杠的单引号,和文件中实际的普通单引号不匹配,自然不会触发替换。
  2. 潜在的sed -i兼容问题:BSD系列(含macOS)的sed要求-i参数必须指定备份文件后缀,不指定的话命令会直接报错,不会修改目标文件。
修复后的正确sed命令

推荐使用兼容所有平台的写法:

# 写法1:双引号包裹规则,不用转义单引号,自动兼容GNU/BSD sed
sed -i.bak "s|'I like pizza'|I like pizza|g" "$1/readme.txt" && rm -f "$1/readme.txt.bak"

# 写法2:单引号包裹规则,单引号用'\''转义,同样全平台兼容
sed -i.bak 's|'\''I like pizza'\''|I like pizza|g' "$1/readme.txt" && rm -f "$1/readme.txt.bak"

说明:这里给-i加.bak后缀是让sed生成临时备份文件,替换完成后再删除备份,避免不同发行版/系统的sed语法差异导致执行失败。另外建议给$1相关的路径加双引号,避免路径带空格时执行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:24:05