使用 grep 命令但仅用于文件的最后几行?
Use grep command but only for the last lines of a file?
如何仅对文件的 'tail' 执行 grep?
我正在尝试 运行 这个命令:
grep 'TEST COMPLETE' -L *.log
TEST COMPLETE 出现在最后几行,此命令列出了文件夹中所有尚未完成测试的文件(因为 -L
)。日志非常大,所以 grep
非常慢。
另一方面,我可以在尾部用管道传递 grep。 grep 几乎是即时的:
tail *.log | grep 'TEST COMPLETE'
但是我不能使用 -l
或 -L
参数,因为我现在正在 grep 管道输入而不是文件。所以 运行 将它与列表文件参数结合起来:
tail *.log | grep 'TEST COMPLETE' -L
只会输出:(standard input)
有什么方法可以让 grep
搜索最后 10 行或类似的内容?
tail -n10 FILENAME
将为您提供文件的最后 10 行。然后,您可以按照您的问题将其通过管道传输到 grep 中。
这应该有效:
for f in *.log; do tail "$f" | grep -q 'TEST COMPLETE' || echo "$f"; done
您可以在 for
循环中完成:
for log in *.log; do
if ! tail "$log" | grep -q 'TEST COMPLETE'; then
echo "$log"
fi
done
假设 tail *.log
在每个文件之间放置 ==> filename <==
并且该字符串不会出现在任何文件中:
tail *.log |
awk 'gsub(/^==> | <==$/,""){if (f) print f; f=""} /TEST COMPLETE/{f=FILENAME} END{if (f) print f}'
如何仅对文件的 'tail' 执行 grep?
我正在尝试 运行 这个命令:
grep 'TEST COMPLETE' -L *.log
TEST COMPLETE 出现在最后几行,此命令列出了文件夹中所有尚未完成测试的文件(因为 -L
)。日志非常大,所以 grep
非常慢。
另一方面,我可以在尾部用管道传递 grep。 grep 几乎是即时的:
tail *.log | grep 'TEST COMPLETE'
但是我不能使用 -l
或 -L
参数,因为我现在正在 grep 管道输入而不是文件。所以 运行 将它与列表文件参数结合起来:
tail *.log | grep 'TEST COMPLETE' -L
只会输出:(standard input)
有什么方法可以让 grep
搜索最后 10 行或类似的内容?
tail -n10 FILENAME
将为您提供文件的最后 10 行。然后,您可以按照您的问题将其通过管道传输到 grep 中。
这应该有效:
for f in *.log; do tail "$f" | grep -q 'TEST COMPLETE' || echo "$f"; done
您可以在 for
循环中完成:
for log in *.log; do
if ! tail "$log" | grep -q 'TEST COMPLETE'; then
echo "$log"
fi
done
假设 tail *.log
在每个文件之间放置 ==> filename <==
并且该字符串不会出现在任何文件中:
tail *.log |
awk 'gsub(/^==> | <==$/,""){if (f) print f; f=""} /TEST COMPLETE/{f=FILENAME} END{if (f) print f}'