如何从字符串中获取2个值

时间:2019-04-12 00:00:44

标签: powershell

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

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地址,这就是我要获取的内容。 我一直在谷歌搜索,不确定从哪里开始/该怎么做。 是正则表达式走的路,还是有更好的方法,任何示例都将不胜感激。 预先感谢

1 个答案:

答案 0 :(得分:2)

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

  • 伪造文本文件中的内容
    您很可能想使用Get-Content或某些预先存在的集合。
  • 遍历集合
  • 使用named-capture-group正则表达式在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文件中。