grep em Powershell

4

Qual é a maneira mais fácil / confortável de usar funções internas do Powershells para emular o comportamento grep ?

Nos scripts eu uso algo parecido com isto

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;
        }
    }
}

Tenho quase certeza de que há uma versão mais fácil / curta para isso, talvez uma de uma linha. Então, qual é o melhor caminho para isso? grep way?

    
por mbx 07.04.2011 / 16:13

2 respostas

14

Eu normalmente faço algo como:

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

Para um arquivo correspondente, isso mostra o nome do arquivo, o número da linha e o conteúdo da linha. Isso também é adequado para pipeline. Eu sugiro que você dê uma olhada em Select-string usando:

help Select-String -Detailed
    
por 07.04.2011 / 17:21
3

Acho que esta é uma alternativa melhor do que o diretório de piping:

findstr "keyword|regex" *.txt

Isso não tem esse problema de empacotamento.

    
por 15.09.2011 / 08:19