findstr 查询包含制表符

Dyc*_*cey 4 regex windows cmd batch-file findstr

我正在尝试使用findstr来代替grep准系统香草窗口盒(遗憾的是这是一个要求)。我有一些相对较大的文件(1Gb+),我想提取那些不包含MXMXnnBRBRnn由制表符分隔的行。如果我正在编写一个“真正的”正则表达式,那么

\t(MX|BR)(..)?\t
Run Code Online (Sandbox Code Playgroud)

会覆盖它。我不介意分两个阶段进行,但我似乎一生都不能包含分隔符选项卡。

到目前为止我有:

findstr /V MX source.txt >> temp.txt
findstr /V BR temp.txt >> dest.txt
Run Code Online (Sandbox Code Playgroud)

由于数据的性质,它做得还不错,但我真的宁愿使用类似的东西:

findstr /R /V "\t(MX|BR)(..)?\t" source.txt >> dest.txt
Run Code Online (Sandbox Code Playgroud)

我尝试过双斜杠、转义序列等,但似乎在原地踏步。

如果可以的话,我不愿意诉诸 VBScript。

鉴于香草窗口的局限性,有什么想法吗?


编辑

我已经研究过使用 /G 选项生成排除文件,但是一旦用户意识到这种可能性,生成可能会开始出现问题 - 正则表达式会容易得多

lid*_*dqy 5

Afaics 没有直接指定水平制表符的语法。Findstr 正则表达式似乎非常基本,它们没有 \s \t \d 之类的:-)。但是,您可以使用输入文件来指定搜索模式。在此文件中,您可以按字面意思使用制表符。您原始帖子中的示例"\t(MX|BR)(..)?\t"

" (MX|BR)(..)? "

没有引号。前导和尾随空格是键入并保存在文件中的制表符。然后你可以将 findstr 与类似的东西一起使用:

findstr /R /G:patternFileWithTabs.txt sourceFile.txt

此外,大多数情况下您可以通过指定独占模式来完成工作。如果排除所有字母数字、常见分隔符、其他空格字符,可能唯一剩下的就是制表符。例如,我一直在搜索默认正则表达式中的序列:

"\t\tUnknown\t\t\t\t0\t"

在我的用例中,我可以使用 findstr 来 grep 它,例如:

findstr /R "[ a-z0-9][ a-z0-9]Unknown[ a-z0-9]*0[ a-z0-9]" logfile.txt

当然这取决于你拥有的实际数据。理论上,该模式也会匹配其他字符串,但这些其他字符串不会出现在我的源文件中,因此它可以工作。大多数时候您不需要 100% 防弹图案。