我如何突出显示以 abc 开头并且不以 xyz 结尾的文件中行?

我如何突出显示以 abc 开头并且不以 xyz 结尾的文件中行?

我有一个每日脚本,它每晚从我的所有 RHEL 服务器检索硬件统计信息,并将其保存到yyyymmdd_每日.log文件。我针对这些文件运行了其他脚本来提取特定数据(即驱动器阵列状态硬件状态磁盘可用空间等)来完成不同的任务。

例子硬件状态脚本输出:

#######################
Server: abc
** Fans **
Health: Ok
** Power Supplies **
Redundancy: Full
#######################
Server: bcd
** Fans **
Health: Partial
** Power Supplies **
Redundancy: Half
#######################
Server: cde
** Fans **
Health: Down
** Power Supplies **
Redundancy: None
#######################
etc... for 44 servers

由于很少出现任何故障,我希望在运行脚本时为显示任何错误类型的行添加颜色。我可以使用 grep 选择要仔细检查的行:

./HardwareStatus | grep '^Health\|^Redundancy\|$'

但从这里开始,我只需要为那些没有以各自满意的答复结尾的经过仔细审查的行添加颜色:

./HardwareStatus | grep --color=auto -v 'Ok$\|Full$'

我尝试将行选择 grep 语句传送到第二个 grep 或使用 egrep,但它只是删除脚本输出中没有令人满意的响应的任何行。

任何帮助都将不胜感激。

答案1

您可以使用coloramaPython 中的包来编写一个简单的过滤器(或者,如果它是用 Python 编写的,则可以将其包含在 HardwareStatus 脚本中)

#!/usr/bin/env python3

import fileinput
from colorama import init, Fore, Back, Style

init()
for line in fileinput.input():
    message = line.strip()
    if (("Health:" in message and "Ok" not in message) or
        ("Redundancy:" in message and "Full" not in message)):
        print(Back.RED + Fore.YELLOW + message + Style.RESET_ALL)
    else:
        print(message)

要使用上述脚本,只需将 HardwareStatus 的输出通过管道传输给它,就像在上面的示例中对 grep 所做的那样。

Colorama 文档了解详情。

相关内容