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

sed命令`s/\s+$//g`无法去除尾随空格,如何解决?

用sed去除尾随空格的正确方法

你的问题出在默认sed使用基础正则表达式(BRE),而你用的\s、+属于扩展正则表达式(ERE)的语法,默认不生效。以下是几种可行的解决方式:

方法1:启用扩展正则表达式(推荐)

添加-E选项(GNU sed也可使用-r,但-E是POSIX标准,兼容性更好),同时用[[:space:]]匹配所有空白字符(包括空格、制表符等),或直接用空格仅匹配空格:

# 匹配所有尾随空白字符(空格、制表符等)
echo "'$(echo 'Magnetic ' | sed -E 's/[[:space:]]+$//')'"
# 仅匹配尾随空格
echo "'$(echo 'Magnetic ' | sed -E 's/ +$//')'"

执行后会输出'Magnetic',成功去除尾随空格。

方法2:使用基础正则表达式语法(无需额外选项)

如果不想加-E,可以把+换成BRE里的\{1,\}(表示匹配1次及以上),同时搭配[[:space:]]或空格:

# 匹配所有尾随空白字符
echo "'$(echo 'Magnetic ' | sed 's/[[:space:]]\{1,\}$//')'"
# 仅匹配尾随空格
echo "'$(echo 'Magnetic ' | sed 's/ \{1,\}$//')'"

方法3:针对GNU sed的简化写法

如果你用的是GNU sed(Linux系统默认),它支持\s匹配空白字符,加上-E即可:

echo "'$(echo 'Magnetic ' | sed -E 's/\s+$//')'"

补充说明

  • 原命令里的g修饰符多余,因为$已锚定行尾,只会匹配一次行尾空白,不需要全局替换。
  • 若要同时处理换行符,可搭配-n和p参数,或结合tr命令辅助,但通常sed的行尾匹配已能处理换行前的空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:15:33