2016-08-24 46 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

谢谢你的回答 –