как использовать команду Select-String для grep двух строк, используйте регулярное выражение `(str1 | str2)` - PullRequest
0 голосов
/ 17 марта 2020

Q1: Как получить кратчайший результат сопоставления в Select-String?

для параметра команды:

-source_file "proccess.log" -regex "D\:\\.*\.'(zip|7z|rar)'"

с файлом оболочки питания:

    param(
    # Enter Source File Path
    [Parameter(Mandatory=$True,Position=0)]
    [ValidateNotNull()]
    [string]$source_file,
    # regex
    [Parameter(Mandatory=$True,Position=1)]
    [ValidateNotNull()]
    [string]$regex
    )

    $result3=Get-Content -Path $source_file |Select-String -Pattern "$regex"|foreach {$_.Matches.Value}
    Write-Output $result3

всегда выводит самые длинные совпадающие строки, например D:\test.zip D:\string1.zip" " D:\string2.rar как я могу получить такой результат, как:

D:\test.zip
D:\string1.zip
D:\string2.rar

тогда я могу обработать условие исключения.

Устранить проблему 1:

-source_file "proccess.log" -AllMatches -regex "D\:\\.*?\.'(zip|7z|rar)'"

спасибо за ответ от @AdminOfThings!

Ps вопрос 2: почему использование скобок в регулярном выражении должно закрываться апострофом? Regex написано догадкой ... и это работает. но я не знаю, почему.

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