我基本上希望寻找、搜索和跟踪不断增长的日志文件经过sed
过滤器后。我想我需要通过tail -f
管道将其跟踪到文件sed
,然后将其通过管道传送到less
.为了测试,我首先尝试组合tail -f
但less +F
无济于事:
tail -f file | less +F
Ctrl-- 在按下+C停止 tail 的跟随之前,less 不会运行。less
选项-B -b 1
没有帮助。less +F -f <(tail -f file)
表现出相同的行为。
如果有人知道比我最终想到的更好/更简单的解决方案,我将不胜感激。
答案1
由于直接管道不起作用,我尝试通过临时文件连接tail -f
, 。最终得到以下结果sed
less +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
管道。