如何从Aruba交换机配置备份中提取Tagged VLAN端口?
提取Aruba交换机配置中VLAN的Tagged端口
步骤1:转换内容格式
Select-String返回的是MatchInfo类型对象,先把它转成纯文本方便后续处理:
$contentText = $content | Out-String
步骤2:正则提取端口字符串
用正则匹配tagged开头的行,提取后面的端口部分:
if ($contentText -match 'tagged\s+(?<ports>.+)') { $taggedPortsStr = $matches['ports'] # 此时$taggedPortsStr的值为 "5,8,47-52" }
正则说明:
tagged\s+:匹配tagged及后续任意数量的空格(?<ports>.+):捕获组,提取该行剩余所有内容并命名为ports
步骤3:(可选)展开端口范围为单个端口
如果后续需要单个端口的列表,可把47-52这类范围展开:
$taggedPorts = $taggedPortsStr -split ',' | ForEach-Object { if ($_ -match '(\d+)-(\d+)') { [int]$start = $matches[1] [int]$end = $matches[2] $start..$end } else { [int]$_ } } # 此时$taggedPorts会是整数数组:5,8,47,48,49,50,51,52
完整示例代码
# 假设$content是之前获取的MatchInfo对象 $contentText = $content | Out-String if ($contentText -match 'tagged\s+(?<ports>.+)') { $taggedPortsStr = $matches['ports'] Write-Host "提取到的端口字符串:$taggedPortsStr" # 可选:展开端口范围 $taggedPorts = $taggedPortsStr -split ',' | ForEach-Object { if ($_ -match '(\d+)-(\d+)') { [int]$start = $matches[1] [int]$end = $matches[2] $start..$end } else { [int]$_ } } Write-Host "展开后的单个端口:$($taggedPorts -join ', ')" } else { Write-Host "未找到tagged配置行" }
内容的提问来源于stack exchange,提问作者Daniel4711
相关产品推荐
相关产品推荐

