【问题标题】:"grep: line too long" error message“grep:行太长”错误信息
【发布时间】:2010-09-07 09:01:19
【问题描述】:

我使用以下语法来查找/etc 下的 IP 地址

(由 Dennis Williamson 在超级用户网站上回答)

但我收到消息“grep: line too long”。

有人知道如何忽略此消息以及为什么我会收到此消息?

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

【问题讨论】:

    标签: grep


    【解决方案1】:

    find/xargs 解决方案对我不起作用,但导致了同样的错误。

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

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

    如果文本文件的行太长,这当然可能不适合您。

    【讨论】:

    • 只是为了让其他人清楚,该选项是印度的大写 I(“-I”),而不是利马的“l”。
    • @riderchap 很高兴看到您的评论。稍后我将尝试使用 cap-I。从 Shorin 的这个答案和 jmtd 的答案来看,似乎有两个问题。一个问题是文件列表太长,另一个问题是文件中的实际行太长。就我而言,它是文件列表,而 jmtd 选项是最好的。对于文件中的行太长的情况,似乎 Shorin 的选项是最好的,但我没有案例可以尝试。也有可能忽略二进制文件会使 Shorin 低于文件列表中最大计数的阈值。
    • 啊!谢谢。我让它看起来像印度而不是利马。
    【解决方案2】:

    使用 find 构建要 grep 的文件列表,

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

    通常 find 是一种更灵活的遍历文件系统并为其他程序构建文件列表的方法。

    【讨论】:

    • 错误信息不是来自shell,即不是参数列表的问题,它太长了。
    • 是的,find/xargs 常用于解决那个问题。这不是那个问题,但使用 find/xargs 仍然可以解决它。
    【解决方案3】:

    也许你的 grep 有一个错误,并且意外地扫描了一个带有太长行的二进制文件(即 grep 处理两个换行符之间的字符太多)。请参阅this red hat page for more details (bug page)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-25
      • 2012-09-22
      • 1970-01-01
      • 2016-08-09
      • 2010-10-15
      • 2011-06-15
      • 2017-11-23
      • 1970-01-01
      相关资源
      最近更新 更多