2016-08-24 65 views
1

我正在使用選擇字符串搜索文件以查找錯誤。是否可以像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

+0

你有每行一個ERR項目? –

+0

使用'-Exclude'ERR-10'' –

+0

我沒有每行的ERROR –

回答

1

我想你可以使用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"} 
+0

謝謝你的回答。我明白你想要做什麼,但這僅僅是一個例子。如果我有越來越複雜的錯誤代碼(像我這樣),這不起作用:例如:ERR-201,ERR-422; ERR-240。我只需要一種方法來過濾錯誤,因爲有些錯誤是真的,其他錯誤只是信息。 –

+0

@PedroSales,然後你修改正則表達式。我所顯示的代碼與'grep -v「ERR- [01] 0」'等效,即使用正則表達式從輸出中排除行。我想你已經知道如何在不帶'-v'參數的情況下模擬'grep'。 – Gebb

+0

隨着grep,我只是管另一個grep -v與另一個錯誤代碼 –

1

我用 「-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 
+0

謝謝你的回答 –