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

GNU sed 4.4替换方括号包裹数字为换行符的正则问题

问题根因

你的sed命令执行后没有任何修改,核心问题是GNU sed默认使用基础正则(BRE)语法:在默认模式下+不会被识别为「匹配1次及以上前序字符」的量词,只会被当成普通的加号字符做字面匹配,所以你写的正则根本没命中任何目标文本,自然不会有替换效果。

可用命令

给你两个可直接在GNU sed 4.4上运行的写法,执行后就能得到你期望的输出:

写法1:默认基础正则模式

给+加上转义符让sed识别它的量词含义,同时把方括号后面的等号也纳入匹配范围(不然等号会残留在文本里):

sed -i 's/\[[0-9]\+\]=/\n/g' sentences.tmp

写法2:扩展正则模式

加-E参数(旧版GNU sed也可以用-r,效果完全一致)启用扩展正则语法,这种模式下+不需要额外转义,写法更简洁:

sed -i -E 's/\[[0-9]+\]=/\n/g' sentences.tmp
踩坑说明

顺便提下你之前试错时遇到的几个问题:

  • 你最开始用的\d是PCRE(Perl兼容正则)的专属语法,sed默认不支持,用[0-9]匹配数字是正确的选择
  • 你之前尝试把替换内容改成xxx也没生效,问题同样出在正则没匹配到内容,和换行符的转义写法无关:GNU sed的替换命令中直接写\n就可以输出换行,不需要写成\\n
  • 你之前写的正则里给等号加了转义写成\=是多余的,等号在sed正则里不属于特殊字符,加转义反而可能导致匹配失败

用你提供的测试样例执行上述命令后,输出结果完全符合预期:

declare -a aRecs=(
"" 
"some text" 
"some more text" 
"three-digit text")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:33:38