我有一个包含 DNS .zone 文件的文件夹。
我试图返回所有文件和 IP 地址看起来像172.20.*.
我使用以下内容:
Get-ChildItem -Recurse -Path 'C:\Root' | Select-String -Pattern '*172.20.*' | group | select name
但这会返回:
Select-String :字符串 *172.20.* 不是有效的正则表达式:解析 "*172.20.*" - 量词 {x,y} 不接任何内容。
我尝试-SimpleMatch在我的案例中使用这个案例Select-String但没有成功。将字符串括在双引号中也不起作用。
如果我使用实际文本作为我的模式,它可以毫无问题地工作。
我的问题在哪里?
就像错误消息说的那样:*172.20.*不是有效的正则表达式。这是一个通配符模式,可以与-like运算符一起使用,但不能与Select-String. *在正则表达式中是一个不能独立存在的修饰符,它需要一些它适用的东西。相当于通配符*(匹配零个或多个字符)的正则表达式是.*。但由于正则表达式(与通配符模式不同)在默认情况下不是锚定的,因此您无需在模式的开头和结尾添加它们以使匹配起作用。
要么将您的表达式更改为实际的正则表达式:
... | Select-String -Pattern '172\.20\.' | ...
或修改您的代码以使用通配符匹配而不是正则表达式匹配:
Get-ChildItem -Recurse  -Path 'C:\Root' | Where-Object {
    Get-Content $_.FullName | Where-Object { $_ -like '*172.20.*' }
} | Select-Object -Expand Name
使用-SimpleMatch对您的方法不起作用,因为-Pattern '*172.20.*' -SimpleMatch会寻找文字(子)字符串*172.20.*(带星号),该字符串可能不存在于您的文件中。如果您从模式中删除通配符,它会起作用:
... | Select-String -Pattern '172.20.' -SimpleMatch | ...
| 归档时间: | 
 | 
| 查看次数: | 1526 次 | 
| 最近记录: |