1

当我在 shell 提示符下键入:

grep -r  "ambiguously" .

我得到错误:

grep:行太长。

基本上,当前目录是一个日志目录,我试图在所有日志文件中找到 sql 错误“列不明确定义”。

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

4

3 回答 3

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/以进一步了解。

于 2012-10-01T21:06:36.797 回答
2

“grep:line too long”并不一定意味着该行“太长”的一个或多个文件包含您正在寻找的字符串。

您可能想尝试:

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

或者

我在find /var/log -type f;做 echo $i && grep PATTERN $i ; 完毕

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

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

于 2014-10-22T16:43:45.193 回答
0

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

尝试

ls -b . | xargs grep "ambiguously"

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

于 2012-10-01T21:00:52.597 回答