4

Какой самый простой / удобный способ использования встроенных функций Powershells для имитации поведения, подобного grep ?

В скриптах я использую что-то вроде этого

dir "*.filter" | foreach-object{
    $actfile = $_
    $readerrorfile = [System.IO.Path]::GetTempFileName()
    $found = $false
    $content = Get-Content $actfile 2> $readerrorfile
    $readerror = Get-Content $readerrorfile
    if($readerror -match "Error"){
        echo "Error while reading from file $actfile"
        echo $readerror
        del $readerrorfile
        Write-Host "stopping execution"
        exit
    }else{
        del $readerrorfile
        if($content -match "keyword|regex"){
            echo "found in $actfile"
            $found = true;
        }
    }
}

Я вполне уверен, что для этого есть более простая / короткая версия, возможно, с одной строкой. Итак, что является лучшим способом для этого grep ?

2 ответа2

14

Я обычно делаю что-то вроде:

dir *.txt | select-string "keyword|regex"

Для соответствующего файла это показывает мне имя файла, номер строки и содержимое строки. Это также благоприятно для трубопроводов. Я предлагаю вам взглянуть на строку выбора с помощью:

help Select-String -Detailed
3

Я считаю, что это лучшая альтернатива, чем piring dir:

findstr "ключевое слово | регулярное выражение" * .txt

Это не та проблема упаковки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .