在 Windows 主机上,我正在查看日志文件以查找特定故障。
我要查找的字符串是 SERV_,但我不想要 SERV_SUCCESS 或 SERV_FAIL。例如,SERV_REPLACE 是我想要捕获的几个代码之一。
grep SERV *.log -d -n | grep -v SERV_SUCCESS *.log -d -n
不起作用(返回所有行 - 一切都匹配),但它也不会抱怨语法。
我所有的主题搜索都提供了适用于 Linux 系统的解决方案。
如果你使用 Powershell,你可以用它Select-String来实现你正在寻找的东西。这是它的参考。
Select-String cmdlet 在输入字符串和文件中搜索文本和文本模式。您可以使用类似于 UNIX 中的 grep 或 Windows 中的 findstr.exe 的 Select-String。
Select-String
[-Pattern] <string[]>
[-Path] <string[]>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet][-List]
[-Include <string[]>]
[-Exclude <string[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <Encoding>][-Context <int[]>]
[<CommonParameters>]
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get', 'Set' -NotMatch
遵循简洁的语法看起来会递归
.log文件SERV_ SERV_FAIL或的行SERV_SUCCESSgci *.log -rec -file | sls 'SERV_' | sls -NotMatch 'SERV_(FAIL|SUCCESS)'
一个更易读的版本是
Get-ChildItem *.log -Recursive -File |
Select-String 'SERV_' |
Select-String -NotMatch 'SERV_(FAIL|SUCCESS)'