【问题标题】:line too long error when trying to grep log files尝试 grep 日志文件时出现行太长错误
【发布时间】:2012-09-22 18:09:30
【问题描述】:

当我在 shell 提示符下键入时:

grep -r  "ambiguously" .

我得到错误:

grep:行太长。

基本上当前目录是一个日志目录,我试图在所有日志文件中定位sql错误'Column ambiguously defined'。

但为什么我会收到错误消息?文件很大,这是主要原因吗?

【问题讨论】:

  • “行太长”与“文件名太多”不同。你确定你的日志文件有用 Unix std '\n' (换行符)字符分隔的行吗?尝试head -1 One_log_file | wc -c 并确保它与使用ls -l One_log_file 列出的文件大小不同,或者这不是一个庞大的数字(小于您的日志文件大小)。也有助于在您的帖子中添加标签以指示您正在使用的操作系统,现代 Linux 在大小上比许多供应商的 Unix 实现更宽容。祝你好运。

标签: file unix grep


【解决方案1】:

您收到错误是因为 grep 可以通过命令行获取的文件数量受到限制。

试试

ls -b . | xargs grep "ambiguously"

编辑: 此解决方案仅在您不需要递归时才有效

【讨论】:

  • 这不是递归的,但 Kaushik 给出了递归命令。
  • 你说得对,这个方案只对同文件夹的日志文件有效
  • 嘿,我很喜欢同一文件夹中的日志文件。但是当我尝试你的建议时,它仍然给出同样的错误
  • 哪个错误?您是否尝试过 sputnick 在他的回答中提出的建议?
  • 你给 grep 的文件列表中可能有一个二进制文件。尝试使用grep -I "ambiguously"。二进制文件不一定有换行符。
【解决方案2】:

你应该试试

find -type f -exec grep PATTERN {} +

命令行限制可以在linux上找到

$ getconf ARG_MAX

在 *BSD 上

$ sysctl kern.argmax

请参阅http://www.cyberciti.biz/faq/argument-list-too-long-error-solution/ 以进一步了解。

【讨论】:

  • 添加了一些文档(更进一步)
  • 当我这样做时:getconf ARG_MAX 我得到了 131072。日志文件的数量小于 131072。
  • 还有..当我这样做时:find -print0 | xargs -0 grep PATTERN,我的 grep:line 太长了
【解决方案3】:

"grep: 行太长" 并不一定意味着该行“太长”的文件包含您要查找的字符串。

你可能想试试:

对于我在find /var/log -type f ;做 echo $i && grep PATTERN $i ;完成 |tee /tmp/output.txt

对于我在find /var/log -type f ;做 echo $i && grep PATTERN $i ;完成了

取决于您搜索的文件数量。

“line too long”会出现在标准错误中,如果您可以向后滚动,您会在屏幕上看到它。它可能是“lastlog”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2012-07-28
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多