我正在使用選擇字符串搜索文件以查找錯誤。是否可以像grep一樣排除搜索模式。例如:在PowerShell中排除搜索模式與選擇字符串
grep ERR* | grep -v "ERR-10"
select-string -path logerror.txt -pattern "ERR"
logerror.txt
OK
ERR-10
OK
OK
ERR-20
OK
OK
ERR-10
ERR-00
我想所有的ERR線,但不是ERR-00和ERR-10
我正在使用選擇字符串搜索文件以查找錯誤。是否可以像grep一樣排除搜索模式。例如:在PowerShell中排除搜索模式與選擇字符串
grep ERR* | grep -v "ERR-10"
select-string -path logerror.txt -pattern "ERR"
logerror.txt
OK
ERR-10
OK
OK
ERR-20
OK
OK
ERR-10
ERR-00
我想所有的ERR線,但不是ERR-00和ERR-10
我想你可以使用Where-Object
這裏。
Write-Output @"
OK
ERR-10
OK
OK
ERR-20
OK
OK
ERR-10
ERR-00
"@ > "C:\temp\log.txt"
# Option 1.
Get-Content "C:\temp\log.txt" | Where-Object { $_ -Match "ERR*"} | Where-Object { $_ -NotMatch "ERR-[01]0"}
# Option 2.
Get-Content "C:\temp\log.txt" | Where-Object { $_ -Match "ERR*" -and $_ -NotMatch "ERR-[01]0"}
謝謝你的回答。我明白你想要做什麼,但這僅僅是一個例子。如果我有越來越複雜的錯誤代碼(像我這樣),這不起作用:例如:ERR-201,ERR-422; ERR-240。我只需要一種方法來過濾錯誤,因爲有些錯誤是真的,其他錯誤只是信息。 –
@PedroSales,然後你修改正則表達式。我所顯示的代碼與'grep -v「ERR- [01] 0」'等效,即使用正則表達式從輸出中排除行。我想你已經知道如何在不帶'-v'參數的情況下模擬'grep'。 – Gebb
隨着grep,我只是管另一個grep -v與另一個錯誤代碼 –
我用 「-notmatch」 參數此
PS C:\>Get-Content .\some.txt
1
2
3
4
5
PS C:\>Get-Content .\some.txt | Select-String -Pattern "3" -NotMatch
1
2
4
5
對於你的情況,答案是:
Get-Content .\logerror.txt | Select-String -Pattern "ERR*" | Select-String -Pattern "ERR-[01]0" -NotMatch
謝謝你的回答 –
你有每行一個ERR項目? –
使用'-Exclude'ERR-10'' –
我沒有每行的ERROR –