grep这个,但不是这个(windows)
在windows主机上,我正在查看特定故障的日志文件 我要寻找的字符串是SERV\u,但我不希望SERV\u成功或失败。例如,SERV_REPLACE是我想要捕获的几个代码之一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
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