要在powershell中的一组文件中查找简单模式,我去
$pattern= 'mypattern'
$r= Get-ChildItem -Path "C:\.." -recurse |
Select-String -pattern $pattern | group path | select name
$r | Out-GridView
在我的场景中,我有多次包含模式的文件和其他只有一次模式的文件。因此,我对那些包含该模式的文件感兴趣不止一次而对其余部分不感兴趣。感谢
答案 0 :(得分:1)
开始您所寻找的一种方法是Select-String
和Group-Object
,就像您已经拥有的一样。
Select-String -Path (Get-ChildItem C:\temp\ -Filter *.txt -Recurse) -Pattern "140" -AllMatches |
Group-Object Path |
Where-Object{$_.Count -gt 1} |
Select Name, Count |
Out-GridView
这将获取临时目录中的所有txt文件,并按匹配数对它们进行分组。 -AllMatches
很重要,因为默认情况下Select-String
只会返回它在一行上找到的第一个匹配项。
在这些群组中,我们采用Where-Object
计数高于1的群组。然后我们只输出文件名,并用Select Name,Count
计算。其中name
是匹配文本所在的完整文件路径。
Out-GridView
我看到您正在分配从Out-GridView
到$r
的输出。如果您想这样做,您需要确保添加-PassThru
参数。