grep这个,但不是这个(windows)

grep这个,但不是这个(windows),windows,grep,Windows,Grep,在windows主机上,我正在查看特定故障的日志文件 我要寻找的字符串是SERV\u,但我不希望SERV\u成功或失败。例如,SERV_REPLACE是我想要捕获的几个代码之一 grep SERV *.log -d -n | grep -v SERV_SUCCESS *.log -d -n 不起作用(返回所有行-所有匹配项),但它也不会抱怨语法 我所有的主题搜索都提供了适用于Linux系统的解决方案。如果您使用Powershell,您可以使用选择字符串来实现所需的功能。这是它的基本原理 Sel

在windows主机上,我正在查看特定故障的日志文件

我要寻找的字符串是SERV\u,但我不希望SERV\u成功或失败。例如,SERV_REPLACE是我想要捕获的几个代码之一

grep SERV *.log -d -n | grep -v SERV_SUCCESS *.log -d -n
不起作用(返回所有行-所有匹配项),但它也不会抱怨语法


我所有的主题搜索都提供了适用于Linux系统的解决方案。

如果您使用Powershell,您可以使用
选择字符串来实现所需的功能。这是它的基本原理

Select String cmdlet在输入字符串和文件中搜索文本和文本模式。您可以使用与UNIX中的grep或Windows中的findstr.exe类似的选择字符串

用法
下面的简洁语法看起来是递归的

  • 对于所有
    .log
    文件
  • 选择包含
    服务的行
  • 从结果中删除包含
    SERV\u FAIL
    SERV\u SUCCESS

gci*.log-rec-file | sls'SERV|sls-NotMatch'SERV|(FAIL | SUCCESS)

更具可读性的版本是

Get-ChildItem *.log -Recursive -File | 
    Select-String 'SERV_' | 
    Select-String -NotMatch 'SERV_(FAIL|SUCCESS)' 
如果使用,您可以使用“负面模式”,如下所示:

这是将否定模式作为
(?^…
格式的正则表达式标记引入以忽略不需要的匹配的原因之一。因为负模式是正则表达式语法的一部分,所以也可以更简洁地编写:

ugrep 'SERV_|(?^SERV_(SUCCESS|FAIL))' *.log

Github包中包含Windows可执行文件。可执行文件是直接从源代码生成的,是良性的。

您是否在Windows上使用Powershell?如果使用Powershell:
sls-path*.log'SERV|sls-NotMatch'SERV|(FAIL | SUCCESS)
您将如何向该命令添加子文件夹搜索?
gci*.log-rec-file | sls'SERV| sls-NotMatch'SERV|(FAIL | SUCCESS)
magic。我添加了尾随的单引号,它工作得非常完美。如果你把它作为一个答案转发,我可以把它标记为正确的。谢谢
Get-ChildItem *.log -Recursive -File | 
    Select-String 'SERV_' | 
    Select-String -NotMatch 'SERV_(FAIL|SUCCESS)' 
ugrep SERV_ -e '(?^SERV_SUCCESS)' -e '(?^SERV_FAIL)' *.log
ugrep 'SERV_|(?^SERV_(SUCCESS|FAIL))' *.log