【发布时间】:2018-05-11 04:56:32
【问题描述】:
我每周运行一次 CRONTAB,它从 40 多个远程服务器收集硬件信息,并在我们总部的报告服务器上创建每周日志文件。我有一个脚本,我针对这个每周文件运行,只将特定的状态行输出到我的显示器。
#!/bin/sh
# store newest filename to variable
DD_FILE="$(ls -t /home/user/ddinfo/|head -1)"
# List the site name, disk ID (virtual & physical), Status and State of each ID, Failure Prediction for each physical disk, and the site divider
grep -w 'Site\|^ID\|^State\|^Status\|^Failure Predicted\|^##' /home/user/ddinfo/$DD_FILE
echo "/home/user/ddinfo/"$DD_FILE
exit 0
这是一个示例输出:
Accessing Site: site01
ID : 0
Status : Ok
State : Ready
ID : 0:0:0
Status : Ok
State : Online
Failure Predicted : No
ID : 0:0:1
Status : Ok
State : Online
Failure Predicted : No
################################################
Accessing Site: site02
ID : 0
Status : Ok
State : Ready
ID : 0:0:0
Status : Non-Critical
State : Online
Failure Predicted : Yes
ID : 0:0:1
Status : Ok
State : Online
Failure Predicted : No
################################################
有没有办法 cat / grep / sed / awk / perl / 这个输出,以便任何以 Critical 或 Yes 结尾的行都被着色?
【问题讨论】:
-
在什么情况下着色? Shell 输出到虚拟终端?这完全取决于所使用的 shell 和终端仿真器、仿真器对颜色的支持以及在输出文本流中嵌入颜色属性的机制。许多终端仿真器支持 ANSI 转义序列,因此在处理需要着色的行时,您需要自己插入这些转义序列。
-
你检查过perl的模块
Term::ANSIColor吗? -
无颜色:
less -p '.*Critical$|.*Yes$|$' file?