Linux 在shell脚本的最后n行中搜索文件内容

Linux 在shell脚本的最后n行中搜索文件内容,linux,bash,shell,grep,Linux,Bash,Shell,Grep,我使用命令删除grep文件内容,并执行一些操作。 但是,文件大小每秒都在不断增长。(将大于500MB) 由于性能问题,我希望在最后N行中对文件内容进行grep,而不是 整个文件内容。 if grep -q "SOMETHING" "/home/andy/log/1.log"; then ps -ef | grep "127.0.0.1:50000" | awk '{print $2}' | xargs kill; cat /dev/null > /home/andy/log/1.l


我使用命令删除grep文件内容,并执行一些操作。
但是,文件大小每秒都在不断增长。(将大于500MB)
由于性能问题,我希望在最后N行中对文件内容进行grep,而不是 整个文件内容。

if grep -q "SOMETHING" "/home/andy/log/1.log"; then
    ps -ef | grep "127.0.0.1:50000" | awk '{print $2}' | xargs kill; cat /dev/null > /home/andy/log/1.log
fi
如何将脚本修改为最后N行中的grep文件内容?

谢谢

您可以使用tail-n获取文件的最后n行

因此,如果您只想查看最后100行,可以使脚本按如下方式工作:

if tail -n 100 "/home/andy/log/1.log" | grep -q "SOMETHING"; then
...

另一种方法是比较现在和过去的文件大小,并使用
tail-c
获得字符(字节)的差异


通过这种方式,您可以更确定您没有遗漏任何内容,也没有太多的grep。

只需使用
tail
并将其输出到
grep
# prev_size is known
curr_size=$(stat -c %s file.log)
if tail -c $((curr_size - prev_size)) | grep -q pattern; then ...
    # ...
fi
prev_size=$curr_size
# loop