给出以下管道文字:
主人 释放
发布2 一些释放
有人可以解释原因吗
findstr / i / r / c:“a release $”
不返回第2行?
在阅读了所有关于windows findstr
命令的想法之后几个小时,似乎无法让$
字符与EOL匹配。请注意,使用/E
开关代替$
没有任何区别。我正在运行Windows 7.
有人能用任何方法使用标准的Windows命令来匹配第2行吗?如有必要,我会求助于grep,但我无法相信没有办法解决这个问题。
谢谢!
答案 0 :(得分:2)
如果数据中没有非可见字符,则最可能的原因是行终止字符。如果管道输出的行不以回车符/换行符(0x0D 0x0A)结束,则findstr将不匹配应该行的行的末尾。
尝试类似
的内容sourceofdata | more | findstr /r /c:"a release$"
sourceofdata | find /v "" | findstr /r /c:"a release$"
find
和more
都会更改行尾。如果它有效,你就找到了问题的根源。
如果没有,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表示文字不是正则表达式。您可以使用命令行开关。在编写命令之前,您是否查找了参考文献。