当我在 shell 提示符下键入:
grep -r "ambiguously" .
我得到错误:
grep:行太长。
基本上,当前目录是一个日志目录,我试图在所有日志文件中找到 sql 错误“列不明确定义”。
但为什么我会收到错误消息?文件很大,这是主要原因吗?
你应该试试
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/以进一步了解。
“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”。
您会收到错误消息,因为 grep 可以通过命令行获取的文件数量受到限制。
尝试
ls -b . | xargs grep "ambiguously"
编辑:此解决方案仅在您不需要递归时才有效