2015-04-08 3 views
1

Чтобы найти простой шаблон в виде набора файлов в PowerShell я идуPowershell - Найти файлы, которые соответствуют шаблону для определенного количества раз

$pattern= 'mypattern' 
$r= Get-ChildItem -Path "C:\.." -recurse | 
    Select-String -pattern $pattern | group path | select name 
    $r | Out-GridView 

В моем случае, у меня есть файлы, которые содержат шаблон для более чем один раз, и другие, которые имеют шаблон только один раз. Поэтому меня интересуют те файлы, которые содержат шаблон более одного раза и не интересуются остальными. Thanks

ответ

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. Затем мы просто выводим имена файлов и подсчитываем их с помощью Select Name,Count. Где name - это полный путь к файлу, в котором находится согласованный текст.

О Out-GridView

Я вижу, что вы assinging выход из Out-GridView в $r. Если вы хотите это сделать, вам нужно обязательно добавить параметр -PassThru.

+0

Спасибо Matt. Это имеет большой смысл :) – BICube

Смежные вопросы