如何使用Perl单行命令递增文件行中路径末尾数字(兼容5.8.3)
需求说明
待处理文件中存储若干onspaces命令行,需将每行内-p参数对应路径段末尾的数字加1,其余内容保持原样:
- 输入样例1:
onspaces -a dataidx -p /dev/itest17/idx_dataidx20 -o 0 -s 2097150 - 输出样例1:
onspaces -a dataidx -p /dev/itest17/idx_dataidx21 -o 0 -s 2097150 - 输入样例2:
onspaces -a dataidx -p /dev/itest17/foobar01 -o 0 -s 2097150 - 输出样例2:
onspaces -a dataidx -p /dev/itest17/foobar02 -o 0 -s 2097150
此前使用的旧Perl命令无法适配该场景,运行环境为Perl 5.8.3老旧版本,需兼容该版本的实现方案。
可行方案
使用如下Perl单行命令即可完成处理,完全兼容Perl 5.8.3版本:
perl -i -pe 's/(-p\s+\S*?)(\d+)(?=\s|$)/$1 . ($2 + 1)/e' 目标文件路径
使用说明
- 正则匹配逻辑:
- 第一组捕获
-p参数标记、以及对应路径中末尾数字之前的所有前缀内容 - 第二组捕获路径末尾的连续数字串,自动兼容带前导零的数字格式(如
01、009) - 正向预查规则确保仅匹配
-p对应路径段的末尾数字,不会误改路径中间的数字、或其他参数的数值 - 替换时通过
e修饰符执行数值计算,将捕获的数字加1后和前缀拼接,自动适配数字长度(如09加1后会正确输出10,不会出现位数截断问题)
- 第一组捕获
- 操作注意事项:
- 加
-i参数会直接原地修改文件,正式执行前建议先备份原文件 - 如果要先预览处理效果、不修改原文件,去掉命令中的
-i参数即可,执行后会在终端打印所有行处理后的结果,确认符合预期再执行原地修改
- 加
内容的提问来源于stack exchange,提问作者ctheising98
相关产品推荐
相关产品推荐

