2010-09-07 88 views
7

我用下面的语法,以便找到/etc的“grep:行太长”错误消息

(由丹尼斯·威廉姆森在超级用户现场回答)

下的IP地址,但我得到的消息“的grep:线路太长“。

有人有想法如何忽略此消息,为什么我得到这个?

grep -Er '\<([0-9]{1,3}\.){3}[0-9]{1,3}\>' /etc/ 
    grep: line too long 

回答

5

使用查找构建文件到grep的列表,

find /etc -type f -print0 | xargs -r0 grep -E '\<([0-9]{1,3}\.){3}[0-9]{1,3}\>' 

一般发现是遍历文件的文件系统和建筑名单,其他程序的更灵活的方式。

+1

错误信息不是来自外壳,即它不是一个参数列表的问题,因为它太长了。 – maxschlepzig 2010-09-07 09:18:37

+0

是的,find/xargs经常被用来解决*那个问题。这不是那个问题,但是使用find/xargs解决它。 – jmtd 2010-09-13 14:25:21

+0

@jmtd精美的作品+1。 – Hazok 2011-09-28 00:47:46

20

find/xargs解决方案对我无效,但导致相同的错误。

我通过使用-I grep选项(忽略二进制文件)解决了此问题。在我的情况下,文件列表中必须有一个二进制文件才能搜索到没有换行符,所以grep试图读取一个太大的巨大行。这是我对这个错误意味着什么的猜测。

我的想法来自:http://web.archiveorange.com/archive/v/am8x7wI0r0243prrmYd4

这可能不是为你工作,当然,如果有一条线太长的文本文件。

+0

为了让其他人明白,这个选项是印度的资本I(“-I”),而不是像利马那样的“l”。 – riderchap 2011-08-19 20:33:58

+0

@riderchap很高兴我读到您的评论。稍后我会试试帽子。从Shorin的这个答案和jmtd的答复中,似乎有两个问题。一个文件列表太长的问题,然后一个问题是文件中的实际行太长。在我的情况下,它是文件列表和jmtd选项是最好的。对于文件中的行太长的情况,Shorin的选择似乎是最好的,但我没有办法尝试。忽略二进制文件也可能使Shorin低于文件列表中最大计数的阈值。 – Hazok 2011-09-28 00:46:37

+1

啊!谢谢。我让它看起来像印度而不是利马。 – Shorin 2011-12-08 15:49:43