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

Linux下如何为文件每行的数字前缀补前导零?

Linux下为每行数字补前导零的简便实现方法

原始文件内容:

1:line1
14:line2
135:line3
15:line4

需要将每行开头的数字补前导零,变成5位格式,期望输出:

00001:line1
00014:line2
00135:line3
00015:line4

你之前用的命令之所以出错,是因为FNR取的是当前行的行号,而不是每行开头的原始数字,所以才会把行号补零后拼接整行内容,导致出现重复的冒号和原始数字。

给你几个简便的正确实现方法:

方法一:awk分割字段处理

这是最直观的方式,用冒号作为分隔符拆分每行内容:

awk -F: '{printf "%05d:%s\n", $1, $2}' file
  • -F::指定每行的分隔符为冒号,这样$1就是开头的数字部分,$2是后面的文本
  • %05d:把$1格式化为5位数字,不足的地方补前导零
  • 最后拼接冒号和$2输出即可

方法二:sed结合printf替换

如果习惯用sed,可以用它的命令执行功能来格式化数字:

sed 's/^[0-9]\+/printf "%05d" &/e' file
  • ^[0-9]\+:匹配行首的一串数字
  • printf "%05d" &:把匹配到的数字(&代表匹配内容)用printf格式化成5位带前导零的数字
  • e:让sed执行替换后的命令,把结果替换回原位置

方法三:Perl一行命令

Perl的正则替换同样可以快速实现:

perl -pe 's/^\d+/sprintf("%05d", $&)/e' file
  • ^\d+:匹配行首的数字串
  • sprintf("%05d", $&):将匹配到的数字格式化为5位带前导零的形式
  • -pe:循环处理每行,替换后输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:07:13