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

csplit正则匹配[]内任意多位数字 实现按Template[n]分割文本

问题根因

csplit 默认采用POSIX基础正则(BRE)语法,你之前写的[0-9]+不生效,是因为BRE规则下+不会被默认识别为「匹配1次及以上」的量词,未转义的+只会匹配字面的加号字符,自然无法命中多位数序号。带括号的([0-9]+)写法额外多了无意义的分组括号,BRE中未转义的括号同样只会匹配字面量括号,匹配逻辑完全错误。

可用方案

全环境兼容写法(推荐)

不需要依赖任何扩展正则特性,所有系统自带的csplit都能正常运行,支持任意长度的数字序号:

csplit -k cert_templates.txt '/Template\[[0-9][0-9]*\]:/' {*}

写法逻辑:第一个[0-9]匹配序号的第一个数字,后续[0-9]*匹配0个或多个数字,组合后等价于「匹配1个及以上任意长度的数字」,无论序号是1位、2位还是上百位都能正常命中。

GNU csplit 简化写法

如果是Linux环境常用的GNU版本csplit,可以给+加转义符让BRE识别量词含义,写法更简洁:

csplit -k cert_templates.txt '/Template\[[0-9]\+\]:/' {*}

扩展正则写法

如果你的csplit版本支持-E参数开启扩展正则(ERE),可以直接用更符合直觉的正则写法,不需要转义量词:

csplit -k -E cert_templates.txt '/Template\[[0-9]+\]:/' {*}

注:你之前写的固定匹配两位数字的写法[0-9][0-9]只能覆盖10-99的序号,本质是硬编码匹配两个数字,没有用量词做可变长度匹配,自然无法支持3位及以上序号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:27:26