首页 > 解决方案 > 如何从字符串中获取2个值

问题描述

我希望有人可以帮助我从哪里开始,我想从一些更大的数据中提取一些数据我的数据如下所示:

IP-MIB::ipNetToMediaPhysAddress.13600001.10.4.48.1 = STRING: 36:b:7:0:41:31
IP-MIB::ipNetToMediaPhysAddress.13600001.10.4.49.21 = STRING: 3b:fa:a2:us:74:d9
IP-MIB::ipNetToMediaPhysAddress.13600001.10.3.50.22 = STRING: 3b:fa:a2:us:7b:f3

每行都有一个以 10 开头的 IP 地址。最后是 mac 地址,这就是我想要的。我一直在谷歌搜索,不知道从哪里开始/做什么。正则表达式是要走的路,还是有更好的方法,任何例子都将不胜感激。提前致谢

标签: powershell

解决方案


这是获取该信息的一种方法... []


  • 在您很可能想要使用的文本文件Get-Content或某些预先存在的集合中进行虚假阅读。
  • 遍历集合
  • 使用命名捕获组正则表达式匹配 IP 和 MAC
  • 从匹配数据创建一个 PSCustomObject,
    您可以从$Matches自动变量中获取它们。
  • 发送当前对象以由 $Results 变量收集
  • 显示该集合

这是代码...

# fake reading in a text file
#    in real life, use Get-Content
$InStuff = @'
IP-MIB::ipNetToMediaPhysAddress.13600001.10.4.48.1 = STRING: 36:b:7:0:41:31
IP-MIB::ipNetToMediaPhysAddress.13600001.10.4.49.21 = STRING: 3b:fa:a2:us:74:d9
IP-MIB::ipNetToMediaPhysAddress.13600001.10.3.50.22 = STRING: 3b:fa:a2:us:7b:f3
'@ -split [environment]::NewLine

$Results = foreach ($IS_Item in $InStuff)
    {
    $Null = $IS_Item -match '\.\d{8}\.(?<IPv4>.+) = .+: (?<MacAddress>.+)$'
    [PSCustomObject]@{
        IPv4 = $Matches.IPv4
        MacAddress = $Matches.MacAddress
        }
    }

$Results

您可以使用Export-CSV将其发送到结构良好的 CSV 文件。


推荐阅读