PowerShell使用Select-String正则匹配返回内容过多,如何仅提取匹配值
解决方案
你原有命令返回的是完整行匹配信息,只需提取匹配结果中的捕获组内容即可得到纯匹配字符串,同时注意正则中的点需要转义才能严格匹配点字符,避免误匹配。
基础用法(直接输出所有匹配结果)
Select-String -Path C:\Samples\* -Pattern "([0-9A-Z]{2,4}\.[0-9A-Z]{8}\.[0-9A-Z]{8}\.[0-9A-Z]{4})" -CaseSensitive | ForEach-Object { $_.Matches.Groups[1].Value }
进阶用法(去重后导出到本地文件)
Select-String -Path C:\Samples\* -Pattern "([0-9A-Z]{2,4}\.[0-9A-Z]{8}\.[0-9A-Z]{8}\.[0-9A-Z]{4})" -CaseSensitive | ForEach-Object { $_.Matches.Groups[1].Value } | Select-Object -Unique > C:\匹配结果.txt
说明
- 正则中的
\.是对原规则中点的转义,确保只能匹配实际的点分隔符,避免误匹配其他字符 $_.Matches.Groups[1].Value对应正则表达式中第一个括号包裹的捕获组内容,也就是你需要的纯匹配字符串
内容的提问来源于stack exchange,提问作者FreeSpace
相关产品推荐
相关产品推荐

