如何在通过过滤器传送的文件中以更少的方式跟踪和查找

如何在通过过滤器传送的文件中以更少的方式跟踪和查找

我基本上希望寻找、搜索和跟踪不断增长的日志文件经过sed过滤器后。我想我需要通过tail -f管道将其跟踪到文件sed,然后将其通过管道传送到less.为了测试,我首先尝试组合tail -fless +F无济于事:

  • tail -f file | less +FCtrl-- 在按下+C停止 tail 的跟随之前,less 不会运行。less选项-B -b 1没有帮助。
  • less +F -f <(tail -f file)表现出相同的行为。

如果有人知道比我最终想到的更好/更简单的解决方案,我将不胜感激。

答案1

由于直接管道不起作用,我尝试通过临时文件连接tail -f, 。最终得到以下结果sedless +F

function lessx {
    [ -f "$1" ] || { echo "First argument must be a file"; return 1; }
    local tmpfile=$(mktemp /tmp/"$(basename "$1.XXX")")
    [ -f "$tmpfile" ] || { echo '`mktemp` failed'; return 1; }
    tail -f "$1" | stdbuf -i0 -o0 sed 's:\\\?\\n:\n:g' > "$tmpfile" &
    less +F "$tmpfile"
    kill %% # kill the tail pipeline, after less exits
    rm "$tmpfile"
}

它完成了这项工作,尽管它比我想要的更复杂。请注意,我的 SunOStail无法理解--pid,因此我手动终止了tail管道。

相关内容