FINDSTR拒绝与EOL匹配

时间:2014-10-30 05:46:44

标签: windows batch-file findstr

给出以下管道文字:

  

主人   释放
  发布2   一些释放

有人可以解释原因吗

  

findstr / i / r / c:“a release $”

不返回第2行?

在阅读了所有关于windows findstr命令的想法之后几个小时,似乎无法让$字符与EOL匹配。请注意,使用/E开关代替$没有任何区别。我正在运行Windows 7.

有人能用任何方法使用标准的Windows命令来匹配第2行吗?如有必要,我会求助于grep,但我无法相信没有办法解决这个问题。

谢谢!

3 个答案:

答案 0 :(得分:2)

如果数据中没有非可见字符,则最可能的原因是行终止字符。如果管道输出的行不以回车符/换行符(0x0D 0x0A)结束,则findstr将不匹配应该行的行的末尾。

尝试类似

的内容
sourceofdata | more | findstr /r /c:"a release$"
sourceofdata | find /v "" | findstr /r /c:"a release$"

findmore都会更改行尾。如果它有效,你就找到了问题的根源。

如果没有,here(如果您还没有加入),您会找到有关findstr如何失败的详尽文档。

答案 1 :(得分:1)

您提到“管道”文本。我只是有这个问题,正在堆栈上搜索。对我来说,答案是:findstr / R和echo命令在DOS(或cmd)中有一些奇怪的怪异现象,并带有管道。

我试图匹配以.jpg结尾的文件,所以要测试,我的命令是:

    echo  "myfile spaces in name.jpg" | findstr /i /r "\.jpg$"

但是那没有用。我使用gnu utils找出,在管道在PIPE的输出中插入SPACE之前用空格回显。由于我已经非常习惯UNIX风格的回声和正则表达式,所以我不希望在回声测试中在文件名之后插入额外的空间。

要解决此问题,我在jpg后的正则表达式中添加了“ *”(星号)(以匹配0个或多个空格):

    echo  "myfile spaces in name.jpg" | findstr /i /r "\.jpg *$"

效果很好。**

使用GNU的八进制转储命令(八进制的空间为040)进行证明:

    c:\>echo "myfile.jpg" | od -cb
    0000000   "   m   y   f   i   l   e   .   j   p   g   "      \r  \n
            042 155 171 146 151 154 145 056 152 160 147 042 040 015 012

现在,如果我删除“ |”之前的空格管道,它消失了:

    c:\>echo "myfile.jpg"| od -cb
    0000000   "   m   y   f   i   l   e   .   j   p   g   "  \r  \n
            042 155 171 146 151 154 145 056 152 160 147 042 015 012

这不应该在DOS中的文本文件中发生,也不应该通过管道过滤掉大多数命令,但是如果您像我一样使用echo执行快速命令行测试,就不会发生这种情况。

** 另一个奇怪的问题(至少在我的Win10版本的findstr上),它会忽略行尾附近的双引号。

答案 2 :(得分:0)

它无效。 / c表示文字不是正则表达式。您可以使用命令行开关。在编写命令之前,您是否查找了参考文献。