2014-10-30 55 views
1

考虑下面的文本管道:FINDSTR拒绝匹配EOL


释放
一个release2
一个部分释放

是否有人可以解释为什么

findstr/i/r/c:“a rel缓解$“

不返回第2行吗?

经过几个小时的阅读所有可以想象的关于windows findstr命令的想象,看起来似乎不可能使$字符与EOL匹配。请注意,使用/E开关而不是$没有区别。我正在运行Windows 7.

有人可以想出任何方式来匹配第2行使用标准的Windows命令?如有必要,我会采取grep,但我不相信没有办法在本地解决这个问题。

谢谢!

+1

当然这不是一个真正的答案,但根据我的经验'findstr'只是不值得痛苦。你[可以列表所有的怪异行为](http://stackoverflow.com/a/8844873/214671),但最终安装GNU coreutils将会带走很多挫败感。 – 2014-10-30 06:55:13

回答

2

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

尝试像

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

两个findmore改变结束行。如果有效,你已经找到了问题的根源。

如果不是,here(如果您还没有找到它),您会发现有关如何findstr可能会失败的广泛文档。

+0

我建议通过重定向到一个文件并使用一个体面的十六进制编辑器来仔细检查先前过程的输出。一些实用程序插入空格,然后在文本中插入空格。其他人只生成LF,而不生成CRLF。其他人使用甚至是陌生人的组合 - 也可能怀疑线路末端的空间。并且要小心未终止的最后一行。 – Magoo 2014-10-30 07:48:45

+0

@Magoo,对不起,我在文中忘记了一个'not'。谢谢。有很多事情会使'findstr'失败,包括数据和程序本身。这只是必须的*可能的原因和确定是否是这种情况的方法。 – 2014-10-30 08:02:56

+0

@MCND是正确的。正如我怀疑的那样,问题确实是EOL角色。我不知道的是,使用'more'(或'find')会纠正行尾。非常感谢您的回复。 – 2014-10-30 12:59:29

0

它不起作用。/c说做字面不正规表达。尽管如此,您仍然可以使用命令行开关。你在写下你的命令之前是否已经查阅了参考资料。

+0

错误 -/R(正则表达式)选项将覆盖/ C:“字符串”选项的默认字面解释。 – dbenham 2014-10-30 11:23:52