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

如何使用sed或vi在文件行尾添加起始值大于1的连续序号

Vim 指定起始值添加连续序号解决方案

核心思路

Vim替换命令中\=后支持表达式计算,你只需要在行号line('.')的基础上加上偏移量即可实现自定义起始序号,偏移量 = 期望起始值 - 1。

方案1:偏移量硬编码(单次使用最快)

比如你要从38开始,偏移量就是38-1=37:

  • 给行首加序号:执行命令 :%s/^/\=(line('.') + 37)/
  • 给行尾加序号:执行命令 :%s/$/\=(line('.') + 37)/
    如果是生成192.168.44.x格式的IP,每行已有192.168.44.前缀的话,直接用上面行尾加序号的命令即可。如果前缀末尾没有带.,可以修改命令自动补全:
    :%s/$/\=".". (line('.') + 37)/

方案2:变量定义起始值(多次调整更方便)

你可以先定义起始值变量,后续修改只需要改变量值即可,不需要重新计算偏移量:

  1. 先执行命令定义起始值::let start_num = 38
  2. 再执行替换命令:
    • 行首加::%s/^/\=(start_num + line('.') - 1)/
    • 行尾加::%s/$/\=(start_num + line('.') - 1)/

方案3:批量处理多文件(无需打开Vim)

如果需要批量处理多个文件,可以直接用Shell的awk命令实现:
awk '{print $0 (NR + 37)}' 原文件.txt > 新文件.txt
要补全IP末尾的.的话,修改命令为:
awk '{print $0"." (NR + 37)}' 原文件.txt > 新文件.txt

局部行处理

如果不需要处理整个文件,只需要处理指定行范围,把命令开头的%替换为行范围即可,比如处理第3行到第15行:
:3,15s/$/\=(line('.') + 37)/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:21:01