findstr正则表达式匹配^ x [0-9] * $

时间:2013-10-15 17:49:36

标签: regex findstr

我有一个文件,我需要提取以“x”开头的行,这些行只是后缀为非负数,仅此而已。例如,从以下几行:

x10
x111 116
x437 444
x2095
x2103 2104
x111
x2451 2506
x20
x10
x40 50
x57 58
x76

我需要提取这些:

x10
x2095
x111
x20
x10
x76

看起来很简单,但以下正则表达式对我不起作用,我无法弄清楚原因:

FINDSTR /R /C:"^x[0-9][0-9]*$" file.txt

我做错了还是FINDSTR中的另一个怪癖?

3 个答案:

答案 0 :(得分:3)

findstr /R "^x[0-9][0-9]*$" file.txt

/C开关用于文字搜索字符串。

编辑:还要注意,file.txt末尾必须有换行符(在“x76”之后)或者findtr不会拾取该行,因为它与“行”末尾的“$”不匹配”

答案 1 :(得分:1)

/C:string使用指定的字符串作为文字搜索字符串。你需要运行

FINDSTR /R "^x[0-9][0-9]*$" file.txt

答案 2 :(得分:0)

D'哦,/ C开关似乎不是原因。问题中给出的命令行实际上是有效的,至少对于我提供的输入。我刚刚在Windows 7 x64上成功启动了它一次。另一次,它失败了(命令没有返回输出)。

对不起,我过早地提出你的答案......两个类似的回复让我确信/ C选项错了......

编辑:我终于找到了它:输入文件来自一个工具,它添加了类似Windows的换行符。在生成文件时,它调用了外部cygwin工具,该工具写入同一文件但具有类似Unix的换行符。这就是为什么FINDSTR给这个文件带来了不一致的结果,以及“$”正则表达式与它应该匹配的所有行都不匹配。