在PowerShell中排除搜索模式与选择字符串
我正在使用选择字符串搜索文件以查找错误。是否可以像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 –