有没有办法在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
呢?
答案 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'。这大概是你想要做的。