2

findstr有没有办法使用Windows 命令行在字母之间连续搜索 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

4

2 回答 2

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

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

于 2012-05-07T19:07:36.553 回答
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. 我做了一些实验,我相信第一个正则表达式要么被丢弃为格式不正确,要么被解释为需要空字符集的匹配。第二个正则表达式解释如下:零个或多个']','data',一个任意字符,'sub'。碰巧,这恰好与您认为正在使用的单个正则表达式匹配相同的行。当你去掉星号时不是这样:

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

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

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

现在您正在搜索单个正则表达式:“视图”、空格、“数据”、任意字符、“子”。这大概是你想要做的。

于 2012-05-08T06:08:35.887 回答