Powershell 中的 grep

Powershell 中的 grep

使用 Powershell 内置函数模拟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

答案1

我通常会做类似的事情:

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

对于匹配的文件,这会显示文件的名称、行号和行的内容。这也是管道友好的。我建议您使用以下方法查看 Select-string:

help Select-String -Detailed

答案2

我发现这是比管道目录更好的替代方案:

findstr“关键字|正则表达式”*.txt

这不存在那个包装问题。

相关内容