这是我要解析的数据:
10.186.128.0/20 172.17.128.161 0 65000 8788
10.186.128.0/20 172.17.128.161 0 65000 878
10.186.128.0/20 172.17.128.161 0 65000 87
理想情况下,输出应与行开头的 IP 地址以及最后 2、3 或 4 位数字匹配。 所需输出示例:
10.186.128.0/20 8788
10.186.128.0/20878
10.186.128.0/20 87
我有与 IP 地址匹配的正则表达式“10\.\d*\.\d*\.\d*\/\d\d”
然后我有第二个正则表达式,它将匹配最后 2 或 3 或 4 位数字 "\d{4}$|\d{3}$|\d{2}$"
问题是如何在 PowerShell 中组合这两个正则表达式以获得所需的结果?
谢谢
最佳答案
您可以使用
Get-Content $filepath | Select-String '^(10(?:\.\d+){3}/\d+)\s.*\s(\d+)$' -AllMatches | Foreach-Object {$_.Matches} | Foreach-Object {$_.Groups[1].Value + " " + $_.Groups[2].Value}
^(10(?:\.\d+){3}/\d+)\s.*\s(\d+)$
正则表达式 - 请参阅 its online demo - 匹配:
^
- 字符串开头(10(?:\.\d+){3}/\d+)
- 第 1 组:10
,然后重复 3 次一个点和任意 1+数字,然后是/
和 1+ 数字\s.*\s
- 一个空格、除换行符之外的任何 0 个以上字符(尽可能多)和一个空格(\d+)
- 第 2 组:1+ 位数字$
- 字符串结尾。
所以,
Get-Content $filepath
读取文件Select-String '^(10(?:\.\d+){3}/\d+)\s.*\s(\d+)$' -AllMatches
获取所有匹配项逐行读取文件得到的文件Foreach-Object {$_.Matches}
逐一抓取所有匹配项Foreach-Object {$_.Groups[1].Value + ""+ $_.Groups[2].Value}
连接第 1 组和第 2 组值。
关于regex - 在 PowerShell 中组合两个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59052465/