如何用Perl脚本解析文本文件提取bugid、描述、用户名并格式化输出
Perl文本解析脚本调整方案
核心实现思路是用正则表达式精准匹配每行固定格式的内容,直接捕获需要的三个字段,比split拆分更稳定不易出错。
调整后的完整脚本
#!perl -w use strict; use warnings; my $ActivityLog = "test.txt"; my $ActListLog = "test3.txt"; open(FILE, "<$ActivityLog") || die "无法打开输入文件 $ActivityLog: $!"; my @prelist = <FILE>; close FILE; my @result; foreach (@prelist) { # 保留原有跳过含Bring over: 内容行的逻辑 next if /Bring over:/; # 正则捕获:分组1为用户名,分组2为bugid+冒号,分组3为描述内容 if (/^\(\d+\)\s+(\w+)\s+<.*?>\s+(\d+:)\s+([^-]+?)\s+-/) { push @result, "$2 $3 $1\n"; } } unlink $ActListLog; open(LISTNAME, ">$ActListLog") || die "无法打开输出文件 $ActListLog: $!"; print LISTNAME @result; close LISTNAME;
主要修改说明
- 新增
use strict和use warnings规范代码,避免未定义变量等潜在问题 - 替换原有split拆分逻辑为正则捕获,适配test.txt每行的固定格式,直接提取所需的用户名、bugid、描述三个字段
- 输出内容按照要求的
[bugid]: [描述] [用户名]格式拼接 - 给文件打开操作补充了错误提示,方便后续排查文件读写类问题
运行上述脚本后,生成的test3.txt内容完全符合你要求的输出格式。
内容的提问来源于stack exchange,提问作者Ras
相关产品推荐
相关产品推荐

