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

Perl脚本处理Cisco交换机文本文件的格式问题

解决Perl脚本解析Cisco交换机输出格式不一致的问题

嘿,我碰到过类似的Cisco设备输出格式不一致的坑!你遇到的问题核心应该是不同获取方式导致输出的换行/分隔逻辑不一样——比如你给的示例里,CPU负载统计和接口信息(Fa0/1 105...)直接挤在了同一行,而你的脚本大概率是按行解析的,自然就会忽略掉这部分内容。

下面给你几个实用的解决思路:

1. 先统一预处理输入文本

如果问题是换行缺失导致的,先把本该分隔的内容拆分成独立行,让脚本的原有逻辑能复用。比如针对你给出的格式,可以用正则把时间戳后的接口信息拆分出来:

open my $input_fh, '<', 'switch_data.txt' or die "Failed to open file: $!";
my $raw_content = do { local $/; <$input_fh> }; # 一次性读取整个文件
close $input_fh;

# 在时间戳(比如"BST Tue Mar 27 2018")后面插入换行,拆分接口信息
$raw_content =~ s/(BST \w+ \d+ \d+) /$1\n/g;

# 现在可以按行处理了
foreach my $line (split /\n/, $raw_content) {
    # 你的原有解析逻辑,比如匹配CPU负载或接口信息
    if ($line =~ /Load for five secs: (\d+)%\/(\d+)%; one minute: (\d+)%; five minutes: (\d+)/) {
        print "5sec Load: $1%, 1min: $3%, 5min: $4%\n";
    } elsif ($line =~ /(\w+\d+\/\d+) (\d+)\.\.\./) {
        print "Interface $1: $2\n";
    }
}

2. 增强正则匹配的灵活性(不依赖换行)

如果预处理还是覆盖不了所有格式差异,直接读取整个文件内容,用全局正则匹配来抓取目标信息,不管它们是否在同一行:

open my $fh, '<', 'switch_data.txt' or die "Can't open file: $!";
my $full_content = do { local $/; <$fh> };
close $fh;

# 匹配CPU负载信息
if ($full_content =~ /Load for five secs: (\d+)%\/(\d+)%; one minute: (\d+)%; five minutes: (\d+)% Time source is (\w+), (.+?) BST (\w+ \d+ \d+)/) {
    my ($five_sec_load, $one_min_load, $five_min_load) = ($1, $3, $4);
    my ($time_source, $timestamp, $date) = ($5, $6, $7);
    print "=== CPU Stats ===\n";
    print "5sec: $five_sec_load% | 1min: $one_min_load% | 5min: $five_min_load%\n";
    print "Time Source: $time_source | Timestamp: $timestamp $date\n";
}

# 全局匹配所有接口信息(支持同一行多个接口的情况)
print "\n=== Interface Stats ===\n";
while ($full_content =~ /(\w+\d+\/\d+) (\d+)\.\.\./g) {
    print "$1: $2\n";
}

3. 排查获取方式的差异

顺便提一句,你可以检查下不同获取方式的输出差异:比如用show processes cpu直接输出和通过SNMP、远程终端(比如telnet/ssh)抓取的输出,换行符可能不同(比如有些是\r\n,有些是\n),或者终端宽度限制导致内容自动换行/合并。如果能从源头统一输出格式,会省很多事~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:24:01