我有一个文件,我需要提取以“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中的另一个怪癖?
答案 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给这个文件带来了不一致的结果,以及“$”正则表达式与它应该匹配的所有行都不匹配。