findstr Windows命令正则表达式

时间:2012-05-07 16:28:29

标签: windows command-line findstr

有没有办法在Windows命令行中使用findstr在字母之间连续搜索2个或更多空格?

示例:

Hello world!  - nomatch wanted
Hello  world! - match wanted

什么是正则表达式语法?

此外,您能否帮我理解以下命令行会话([ ][ ]*之间的区别;第二个命令不返回任何内容):

c:\1>findstr -i -r  "view[ ]*data.sub" "view data sub.acf"
View Data Sub.ACF:            "].DATE_STAMP)>=[Forms]![MainNav]![View Data Sub]"
View Data Sub.ACF:            "].DATE_STAMP)<[Forms]![MainNav]![View Data Sub]"

c:\1>findstr -i -r  "view[ ]data.sub" "view data sub.acf"

c:\1>
PS:好奇;我知道awk,perl,C#等,但是findstr呢?

2 个答案:

答案 0 :(得分:4)

如果您只想找到两个连续的空格:

findstr /C:"  " input.txt

或者在不区分大小写的正则表达式中:

findstr /R /I /C:"lo  wo" input.txt

重要的一位是模式前面的/C:。这告诉findstr将模式视为文字字符串。没有它,findstr将模式分割成空格中的多个模式。根据我的经验,这绝不是你想要的。

<强>更新

在字母之间做两个或多个空格:

findstr /R /I /C:"[a-z]   *[a-z]" input.txt

请注意,模式中有三个空格。这匹配一个字母,两个空格后跟零个或多个空格(即两个或多个空格)和另一个字母。

答案 1 :(得分:0)

在字母之间找到两个或多个连续的空格:

C:\Users\harry> findstr /i /r /c:"o  [ ]*w" test.txt
Hello  world!
Hello   world!

翻译:匹配包含'o',两个空格,零个或多个空格的行,'w'。 (方括号是多余的,但增加了清晰度。)据推测,您已经知道findstr /?将为您提供正则表达式语法的摘要?

关于你问题的第二部分:正如arx已经指出的那样,你没有得到预期结果的原因是你没有使用/ C标志。考虑你的第一个命令:

findstr -i -r  "view[ ]*data.sub" "view data sub.acf"

这被解释为搜索与两个正则表达式view[]*data.sub匹配的任何行。我已经做了一些实验,我相信第一个正则表达式要么被丢弃,要么被错误地形成,要么被解释为需要从一组空字符中匹配。第二个正则表达式解释如下:零个或多个']','数据',一个任意字符,'sub'。碰巧的是,这恰好与您认为使用的单个正则表达式相同。当你带走星号时不是这样:

findstr -i -r  "view[ ]data.sub" "view data sub.acf"

现在第二个正则表达式解释如下:恰好是一个''','数据',一个任意字符,'sub'。由于字符串']数据'不会出现在您的文本中,因此所有行都不匹配。相反,您应该指定/ c:

findstr /i /r /c:"view[ ]data.sub" "view data sub.acf"

现在您正在搜索单个正则表达式:'view',空格,'data',任意字符,'sub'。这大概是你想要做的。