【问题标题】:search file content in last n lines of shell script在 shell 脚本的最后 n 行中搜索文件内容
【发布时间】:2014-08-06 22:14:15
【问题描述】:


我用命令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 并将其输出到grep

标签: linux bash shell grep


【解决方案1】:

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

所以如果你只想查看最后 100 行,你可以让你的脚本像这样工作:

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

【讨论】:

    【解决方案2】:

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

    # 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
    

    这样你就更确定你没有遗漏任何东西,或者贪婪太多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 2018-10-09
      • 1970-01-01
      • 2011-01-20
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多