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

如何用Shell将单行文本在每个数字后拆分换行?

单行文本按数字串后拆分多行的Shell解决方案

需求回顾

输入示例:

a 111111b 222c 3d 444444

期望输出:

a 111111
b 222
c 3
d 444444

用gawk实现的方法

直接用gsub函数匹配数字串后跟字母的位置,替换成数字串加换行符加字母,就能完成拆分:

gawk '{gsub(/([0-9]+)([a-zA-Z])/, "\1\n\2"); print}' 你的文件名.txt
  • 正则([0-9]+)匹配连续的数字串,([a-zA-Z])匹配数字串后面紧跟的字母;
  • "\1\n\2"把匹配到的部分替换成「数字串+换行+字母」,自然就把单行拆成了多行。

批量处理文件

如果要处理一批.txt文件,不想手动逐个输入文件名,可以用循环生成拆分后的新文件(避免覆盖原文件):

for file in *.txt; do
    gawk '{gsub(/([0-9]+)([a-zA-Z])/, "\1\n\2"); print}' "$file" > "${file%.txt}_split.txt"
done

执行后,每个原文件会对应生成一个带_split后缀的拆分后文件。

备选:用sed实现

如果习惯用sed,也可以用替换命令完成,GNU sed直接用:

sed 's/\([0-9]\+\)\([a-zA-Z]\)/\1\n\2/g' 你的文件名.txt

如果是macOS等用BSD sed的系统,需要加-E参数简化正则写法:

sed -E 's/([0-9]+)([a-zA-Z])/\1\n\2/g' 你的文件名.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:20:30