PowerShell :: Regex Поиск в файле - PullRequest
0 голосов
/ 04 ноября 2018

Это мой первый день с PowerShell, и я пытаюсь найти отсутствие вхождения шаблона REGEX в файле и установить это число в переменную. Пожалуйста, помогите мне.

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Juste сделай это:

Select-String -Path "PathFile" -Pattern "YourRegex" -NotMatch
0 голосов
/ 04 ноября 2018

Предполагая, что вы не имеете в виду число:

для содержимого файла с использованием Select-String, Measure-Object

$Count = (Select-String -Pattern 'pattern' -Path 'x:\path\file.txt'|Measure-Object).Count

Для переменной и использования .net

$Count = [regex]::matches($Content,'pattern').count

Одна подсказка: Select-String по умолчанию не учитывает регистр,
метод точечной сети нет. Для этого вы можете добавить шаблон с (?i).

0 голосов
/ 04 ноября 2018
$notMatchingLines = Get-Content "pathToYourFile" | Select-String "YourRegex" -NotMatch

Если вы хотите узнать количество строк, не соответствующих вашему регулярному выражению, вы можете сделать:

$notMatchtingLines.Count

Практический пример, вернуть все строки из моего vimrc, не содержащие слова "set":

>$linesNotContaingSet = Get-Content .\_vimrc | Select-String "set" -NotMatch
>$LinesNotContaingSet.GetType()

 IsPublic IsSerial Name                                     BaseType
 -------- -------- ----                                     --------
 True     True     Object[]                                 System.Array

Результатом является массив:

 > $LinesNotContaingSet[0]
 call plug#begin()

Количество строк не совпадает:

 > $LinesNotContaingSet.Count

Если вы хотите узнать, что еще можно сделать с возвращенными объектами, используйте Get-Member (псевдоним = gm):

> $LinesNotContaingSet | gm


TypeName: Microsoft.PowerShell.Commands.MatchInfo

Name         MemberType Definition
----         ---------- ----------
Equals       Method     bool Equals(System.Object obj)
GetHashCode  Method     int GetHashCode()
GetType      Method     type GetType()
RelativePath Method     string RelativePath(string directory)
ToString     Method     string ToString(), string ToString(string directory)
Context      Property   Microsoft.PowerShell.Commands.MatchInfoContext  Context {get;set;}
Filename     Property   string Filename {get;}
IgnoreCase   Property   bool IgnoreCase {get;set;}
Line         Property   string Line {get;set;}
LineNumber   Property   int LineNumber {get;set;}
Matches      Property   System.Text.RegularExpressions.Match[] Matches {get;set;}
Path         Property   string Path {get;set;}
Pattern      Property   string Pattern {get;set;}

Для более глубокого изучения Powershell MVA PowerShell Jumpstart видео.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...