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

如何将Plink获取的交换机MAC地址表转为数组或纯文本?

处理Plink输出中的MAC地址表(清理控制字符并转为数组)

第一步:清理终端控制字符和冗余内容

那些[1;24r类的字符是ANSI终端控制序列,直接用正则替换清除。同时过滤掉重复的交换机提示符和输入的命令行:

# 清除所有ANSI终端控制字符
$cleanOutput = $output -replace '\x1b\[[0-?]*[ -/]*[@-~]', ''

# 过滤冗余行:提示符、命令行、空行
$cleanLines = $cleanOutput -split "`n" | Where-Object {
    $_ -notmatch '^192-168-1-110--2930-48POE#\s*$' -and 
    $_ -notmatch 'show mac-address' -and 
    $_ -notmatch '^\s*$'
}

第二步:提取MAC地址表核心内容

定位表头位置,跳过表头和分隔线,只提取数据行:

# 找到表头行的索引
$headerLine = $cleanLines | Where-Object { $_ -match 'MAC Address\s+Port\s+VLAN' }
$headerIndex = $cleanLines.IndexOf($headerLine)

# 跳过表头+分隔线,提取数据行
$tableDataLines = $cleanLines | Select-Object -Skip ($headerIndex + 2)

第三步:转为PowerShell对象数组

用正则解析每行数据,生成结构化的对象数组,方便后续操作:

$macAddressTable = $tableDataLines | ForEach-Object {
    # 匹配MAC地址、端口、VLAN字段(适配你的输出格式)
    if ($_ -match '^\s*([0-9a-fA-F-]+)\s+(\S.+?)\s+(\d+)\s*$') {
        [PSCustomObject]@{
            MACAddress = $matches[1]
            Port       = $matches[2].Trim()
            VLAN       = [int]$matches[3]
        }
    }
}

# 查看结果
$macAddressTable

说明

如果你的交换机输出格式有细微差异,只需调整正则表达式的匹配规则即可,核心流程不变:清理控制字符 → 定位表范围 → 解析结构化数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:20:40