Bash 是否可以将多个流的内容输出到终端中的单独列中?

Bash 是否可以将多个流的内容输出到终端中的单独列中?,bash,awk,grep,less-unix,Bash,Awk,Grep,Less Unix,对于工作,我偶尔需要监视我创建的服务的输出日志。这些日志是短暂的,包含了很多我不需要的信息。到目前为止,我一直在观察他们使用: grep <tag> * | less grep*|更少 其中是信息、调试、警告或错误。警告的数量大约是错误的10倍,调试的数量大约是警告的10倍,以此类推。这使得在大量的相关调试消息中很难捕捉到一个错误。例如,我想要一种方法,使所有“警告”消息显示在终端的左侧,所有“错误”消息显示在右侧 我尝试过使用tmux和screen,但它在我的开发机器上似乎不起

对于工作,我偶尔需要监视我创建的服务的输出日志。这些日志是短暂的,包含了很多我不需要的信息。到目前为止,我一直在观察他们使用:

grep <tag> * | less
grep*|更少
其中
是信息、调试、警告或错误。警告的数量大约是错误的10倍,调试的数量大约是警告的10倍,以此类推。这使得在大量的相关调试消息中很难捕捉到一个错误。例如,我想要一种方法,使所有“警告”消息显示在终端的左侧,所有“错误”消息显示在右侧

我尝试过使用tmux和screen,但它在我的开发机器上似乎不起作用。

尝试这样做:

FILE=filename.log
vim -O <(grep 'ERR' "$FILE") <(grep 'WARN' "$FILE")
FILE=filename.log

vim-O如果这些是实时日志,那么在不同的终端中运行这两个命令如何:

错误:

tail -f * | grep ERROR
警告:

tail -f * | grep WARN
编辑 要实现自动化,您可以在tmux会话中启动它。我倾向于使用类似于我所描述的tmux脚本来实现这一点

在您的情况下,脚本文件可能包含如下内容:

tmux new -d \; source-file monitor.tmux; tmux attach
monitor.tmux

send keys“tail-f*| grep错误\n”
分裂
发送键“tail-f*| grep WARN\n”
然后像这样运行:

tmux new -d \; source-file monitor.tmux; tmux attach
你可以用电脑来做这个。只需垂直拆分屏幕并在每个窗格上运行
tail-f LOGFILE | grep关键字

作为快捷方式,您可以使用以下rc文件:

split -v
screen bash -c "tail -f /var/log/syslog | grep ERR"
focus
screen bash -c "tail -f /var/log/syslog | grep WARN"
然后使用以下命令启动
屏幕
实例:

screen -c monitor_log_screen.rc
当然,您可以通过进行更多拆分,并使用诸如
tail-f
watch
等命令来获得不同输出的实时更新,从而进一步扩展此概念


同时也要探索屏幕的其他功能,例如使用多个窗口(带)和,您可以得到一个非常全面的“监控控制台”。

只需使用sed缩进所需的行即可。或者,使用颜色。例如,要使错误变为红色,可以执行以下操作:

$ r=$( printf '\033[1;31m' )  # escape sequence may change depending on the display
$ g=$( printf '\033[1;32m' )
$ echo $g  # Set the output color to the default
$ sed "/ERROR/ { s/^/$r/; s/$/$g/; }" *

这不是你问题的答案,但是
tail-f | grep
可以成为你实时日志的朋友。你有没有尝试过像
logcheck
这样的日志过滤器?Benj:这或多或少是我一直在做的,虽然如此,在数百条信息中很难捕捉到少数错误。Olaf:我只限于开发站上的默认和批准的程序。我希望我可以使用别名并只运行一个命令,正如我在最初的问题“我不能真正使用tmux”中指出的,我的开发盒是一个通过NX控制的无头虚拟机。出于某种原因或其他原因,tmux和屏幕具有不可预测的行为。NX==NoMachine?那么产生两个终端怎么样,例如:
ssh-X主机nohup xterm-e'tail-f*| grep ERROR'
等等。正如我在最初的问题中提到的,我不能真正使用屏幕,我的开发盒是一个通过NX控制的无头虚拟机。由于某些原因,tmux和screen具有不可预测的行为。