类似于“watch -d”的linux命令的颜色输出以突出显示差异?

类似于“watch -d”的linux命令的颜色输出以突出显示差异?

我正处于 shell 脚本编写等的开始阶段,并且在找到对命令的重复输出进行着色的正确方法方面遇到了一些挑战,类似于 watch 命令中的 -d 选项。

我想看看 lsof 和其他一些命令的变化。这意味着,我只希望更改/新的行为红色(而不是用白色背景突出显示并突出显示以下所有行)。有没有一种优雅的方法可以使用 diff 或任何其他命令来完成它?

示例:红线显示通过 SSH 的新连接。

在此输入图像描述

(我知道,我可以在这里用 GREP 查找 ESTABLISHED,但并不是我想查看的每个命令都会给我一个要搜索的关键字。所以我必须在输出中查找新的/更改的行。)

答案1

最后我找到了实现它的方法。出于性能和延迟原因,我想避免文件操作(tmpfs 等)。诀窍是告诉dwdifforwdiff在它的两个参数中命令的输出是什么曾是在同一迭代内。流程替换是我的帮手:

while true; do p1=$p2; p2=$(clear; iotop -ob -n1); 
    dwdiff -y "\010" -1 -c <(echo "$p1") <(echo "$p2"); sleep 1; done

删除-y "\010"更改的单词之前的空格以保持列良好对齐。$p1$p2用于保留过程替换的范围<(...)。直接提供替换中的输出对我来说不起作用。我从这里得到这个提示邮政。

也许有一个更简单的解决方案,但我毕竟太复杂了。请随意发布!

答案2

您可以使用ANSI转义序列。要设置所需的颜色和样式,有一种语法\033[#m,其中 # 可以是一组有效的分号分隔的数字。

您可以定义颜色,例如

CLEAR="\033[0m"
GREEN="\033[0;32m"
BLUE="\033[0;34m"
PURPLE="\033[0;35m"
RED="\033[0;31m"
YELLOW="\033[1;33m"

并使用它们,例如echo -e "${GREEN}Updated${CLEAR}"

检查此处以获取更多参考

相关内容