鉴于以下内容以文本形式列出:
一位大师 一次释放 一个release2 一次释放
有谁能解释一下为什么
findstr /i /r /c:“发行版$”
不返回2行吗?
在阅读了几个小时关于windows findstr命令的所有可以想象的内容之后,似乎不可能让$字符与EOL匹配。请注意,使用/E开关而不是$并没有什么不同。我正在运行Windows 7。
有人能想出任何方法来匹配只使用标准windows命令的第2行吗?如果必要的话,我会求助于grep,但我不敢相信没有办法解决这个问题。
谢谢!
发布于 2014-10-30 06:45:29
如果数据中没有不可见的字符,最可能的原因是行终止字符。如果管道行没有以回车/行提要(0x0D0x0A)字符结尾,findstr将不匹配该行的末尾。
试着做些像
sourceofdata | more | findstr /r /c:"a release$"
sourceofdata | find /v "" | findstr /r /c:"a release$"find和more都会更改行的结尾。如果有效的话,你已经找到了问题的根源。
如果没有,here (如果您还没有阅读它),您将发现关于findstr如何失败的大量文档。
发布于 2020-08-30 19:38:31
你提到了“管道”短信。我只是遇到了这个问题,在堆里搜索。对我来说,findstr /R和echo命令对于DOS (或cmd)中的管道有一些奇怪的怪癖。
我试图匹配以.jpg结尾的文件,所以为了测试,我的命令是:
echo "myfile spaces in name.jpg" | findstr /i /r "\.jpg$"但那不管用。我使用gnu来查找,在管道的输出中插入一个空格之前,用一个空格回显。由于我非常习惯UNIX样式的回显和正则表达式,所以我不希望在回显测试中的文件名之后插入额外的空间。
为了修复,我在regex中的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进行快速命令行测试,则会发生这种情况。
** 另一个奇怪的(至少在findstr的Win10版本中),它忽略了行尾处的双引号。
发布于 2014-10-30 09:46:14
恐怕行不通。/c说做字面上的,不定期的表达。不过,您可以让它与命令行开关一起工作。你在写命令之前查过参考资料了吗。
https://stackoverflow.com/questions/26645911
复制相似问题