如何自动向文本文件添加大量格式相似的内容?
如何自动向文本文件添加大量格式相似的内容?
当然有办法!不用写完整的C程序或者awk脚本,用Vim/Vi或者Shell命令就能轻松搞定,我给你分享两种最常用的方案:
一、用Vim/Vi快速生成
Vim自带的命令和宏功能完全能搞定这个需求,两种操作方式任你选:
1. 一键批量生成(适合快速操作)
打开Vim后,直接在正常模式下输入这条命令:
:for i in range(1,1000) | put ='user'.printf('%03d',i) | endfor
解释下:
range(1,1000)表示循环变量i从1到999(因为Vim的range是“左闭右开”的)printf('%03d',i)把数字i格式化成三位带前导零的字符串,比如1变成001,10变成010put =...就是把拼接好的userXXX插入到当前光标下方
执行完这条命令,你要的user001到user999就全部生成了,直接保存退出就行。
2. 录制宏逐步生成(适合理解过程)
如果觉得上面的命令有点抽象,用宏录制也很直观:
- 进入Vim后,先按
i进入插入模式,输入第一行user001,按Esc回到正常模式 - 按
q a开始录制宏(把操作记录到寄存器a里) - 依次执行:
yy(复制当前行)→p(粘贴到下一行)→Ctrl+a(把当前行的数字加1,Vim会自动保留前导零,001加1后就是002) - 按
q停止录制宏 - 现在只要输入
997 @ a,就会重复执行刚才的宏997次——因为已经有2行了,再执行997次就能得到999行内容
二、用Shell命令直接生成
如果连Vim都不想打开,直接在终端用一行命令就能生成目标文件:
方法1:用printf + 括号展开
printf "user%03d\n" {1..999} > users.txt
{1..999}是Shell的括号展开,会生成1到999的所有数字printf "user%03d\n"把每个数字格式化成userXXX的格式,%03d保证是三位带前导零的数字,\n是换行> users.txt把结果输出到users.txt文件里
方法2:用seq + sed
seq -w 1 999 | sed 's/^/user/' > users.txt
seq -w 1 999生成1到999的数字,-w参数让所有数字宽度相同,自动补前导零sed 's/^/user/'给每行开头加上user字符串- 最后重定向到文件就行
这两种Shell方法都能瞬间生成你要的内容,根本不用手动一行行敲!
备注:内容来源于stack exchange,提问作者infosec-guy




