題 greers in Powershell


使用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 辦法?


4
2018-04-07 14:13


起源




答案:


我通常會這樣做:

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

對於匹配的文件,這將顯示文件的名稱,行號和行的內容。這也是管道友好的。我建議您使用以下方法查看Select-string:

help Select-String -Detailed

14
2018-04-07 15:21



雖然這種方法很有效,但是如果線條太長,它就會被包裹在120個字符之後,即使用管道傳輸也是如此 - mbx
如果管道,你不會有包裝問題 Select-String 至 Set-Content 要么 Add-Content - Rynant


我發現這是比管道dir更好的選擇:

findstr“keyword | regex”* .txt

這沒有包裝問題。


3
2017-09-15 06:19