Dyc*_*cey 4 regex windows cmd batch-file findstr
我正在尝试使用findstr来代替grep准系统香草窗口盒(遗憾的是这是一个要求)。我有一些相对较大的文件(1Gb+),我想提取那些不包含MX、MXnn、BR和BRnn由制表符分隔的行。如果我正在编写一个“真正的”正则表达式,那么
\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 选项生成排除文件,但是一旦用户意识到这种可能性,生成可能会开始出现问题 - 正则表达式会容易得多。
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% 防弹图案。
| 归档时间: |
|
| 查看次数: |
4641 次 |
| 最近记录: |