【发布时间】:2019-11-26 13:51:51
【问题描述】:
这是我要解析的数据:
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/20 878
10.186.128.0/20 87
我有匹配 IP 地址"10\.\d*\.\d*\.\d*\/\d\d" 的正则表达式
然后我有第二个正则表达式将匹配最后 2 或 3 或 4 位数字" \d{4}$| \d{3}$| \d{2}$"
问题是如何在 PowerShell 中结合这两个正则表达式来达到预期的结果?
谢谢
【问题讨论】:
-
可能是
$s -replace '^(10(?:\.\d+){3}/\d+)\s.*\s(\d+)$', '$1 $2'?还是您的意思是文本包含需要首先提取的行? -
如果您尝试匹配 IP 地址,点之间的位数永远不会超过 3 位,并且永远不会小于 1。您应该将您的正则表达式更改为
10\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{2} -
酷。谢谢。我修改了我的 IP 匹配正则表达式。但是,如何实现获取 IP 以及字符串中的最后 2 位或 3 位或 4 位数字的预期结果?
-
我为你创建了一个regex 101 来测试更多的案例,基本上,我添加了一个空格来匹配 2 到 4 位数字。
-
Select-String '(?m)^(10(?:\.\d+){3}/\d+)\s.*\s(\d+)\r?$' -input $txt -AllMatches | Foreach {$_.matches} | Foreach {$_.groups[1].value + " " + $_.groups[2].value}?注意$txt这里是一个多行字符串输入。它在 PS 6.1.3 中输出预期结果
标签: regex powershell parsing select-string