当我在shell提示符下输入:
grep -r "ambiguously" .
我收到错误:
grep:行太长了。
基本上当前目录是一个日志目录,我试图在所有日志文件中找到sql错误“Column ambiguously defined”。
但为什么我会收到错误?文件的大小非常庞大,这是主要原因吗?
答案 0 :(得分:2)
" grep:行太长" 并不一定意味着该行所在的文件或文件过长而且#34;包含您正在寻找的字符串。
您可能想尝试:
for find /var/log -type f
;回声$ i&& grep PATTERN $ i;完成| tee /tmp/output.txt
或
for find /var/log -type f
;回声$ i&& grep PATTERN $ i;完成了
取决于您搜索的文件数量。
"行太长"将出现在标准错误中,如果您可以向后滚动,您将在屏幕上看到它。它可能是" lastlog"。
答案 1 :(得分:1)
你应该试试
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/以便更进一步。
答案 2 :(得分:0)
您收到错误,因为grep受命令行可以获取的文件数量有限。
尝试
ls -b . | xargs grep "ambiguously"
编辑: 此解决方案仅在您不需要递归时才有效