我运行每周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
Run Code Online (Sandbox Code Playgroud)
这是一个示例输出:
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
################################################
Run Code Online (Sandbox Code Playgroud)
有没有办法cat/grep/sed/awk/perl /这个输出,以便以任何一个Critical或以任何Yes颜色结束的任何行变色?
使用GNU grep:
grep --color -E ".*Yes$|.*Critical$|$" file
Run Code Online (Sandbox Code Playgroud)
你可以试试ack,这是grep的一个非常好的选择:
% ack '(Critical|Yes)$' file
# Or to colorize the whole line:
% ack '(.*(Critical|Yes))$' file
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要查看所有行并且只对特定行进行着色:
use Term::ANSIColor qw/ colored /;
while (<$fh>) {
s/(.*)(Critical|Yes)$/colored(["yellow bold"], $1.$2)/e;
print;
}
Run Code Online (Sandbox Code Playgroud)
感谢您的所有回复。我最终将原始 grep 结果传输到另一个 grep| grep --color=auto '.*\(Yes\|Critical\).*\|$' 并得到了我想要的彩色结果:
grep -i 'site\|^ID\|^State\|^Status\|^Failure Predicted\|^##' /home/user/ddinfo/$DD_FILE | grep --color=auto '.*\(Yes\|Critical\).*\|$'
Run Code Online (Sandbox Code Playgroud)
这是新的示例输出: