bash - 如果 != 从输出/文件中提取值并通过管道发送到电子邮件
问题描述
我有一台安装了 hwraid (megaclisas) 的服务器https://hwraid.le-vert.net/wiki/DebianPackages
示例输出如下所示:
-- Controller information --
-- ID | H/W Model | RAM | Temp | BBU | Firmware
c0 | PERC H310 Mini | 0MB | 59C | Absent | FW: 20.13.3-0001
-- Array information --
-- ID | Type | Size | Strpsz | Flags | DskCache | Status | OS Path | CacheCade |InProgress
c0u0 | RAID-10 | 3272G | 64 KB | RA,WT | Default | Optimal | /dev/sda | None |None
-- Disk information --
-- ID | Type | Drive Model | Size | Status | Speed | Temp | Slot ID | LSI ID
c0u0s0p0 | HDD | SEAGATE ST900MM0006 LS0AS0N3Bxxx | 837. Gb | Online, Spun Up | 6.0Gb/s | 31C | [32:0] | 0
c0u0s0p1 | HDD | SEAGATE ST900MM0006 LS0AS0N3Bxxx | 837. Gb | Online, Spun Up | 6.0Gb/s | 31C | [32:1] | 1
c0u0s1p0 | HDD | SEAGATE ST900MM0006 LS0AS0N3Bxxx | 837. Gb | Online, Spun Up | 6.0Gb/s | 28C | [32:2] | 2
c0u0s1p1 | HDD | SEAGATE ST900MM0006 LS0AS0N3Bxxx | 837. Gb | Online, Spun Up | 6.0Gb/s | 30C | [32:3] | 3
c0u0s2p0 | HDD | SEAGATE ST900MM0006 LS0AS0N3Bxxx | 837. Gb | Online, Spun Up | 6.0Gb/s | 29C | [32:4] | 4
c0u0s2p1 | HDD | SEAGATE ST900MM0006 LS0AS0N3Bxxx | 837. Gb | Online, Spun Up | 6.0Gb/s | 31C | [32:5] | 5
c0u0s3p0 | HDD | SEAGATE ST900MM0006 LS0AS0N3Bxxx | 837. Gb | Online, Spun Up | 6.0Gb/s | 30C | [32:7] | 7
c0u0s3p1 | HDD | SEAGATE ST900MM0006 LS0AS0N3Bxxx | 837. Gb | Online, Spun Up | 6.0Gb/s | 28C | [32:6] | 6
我想要实现的是 grep Status 值,如果它不等于 Optimal 或 Online,然后通过管道发送到电子邮件。我在这里遇到的问题是如何使用 sed 或 awk 来获得它。
解决方案
这是一个解决方案如何进行
data=$(mktemp)
externalprogram > $data
RESULT=$(
grep "| RAID" $data | sed -n '/Optimal/!p'
grep "| HDD" $data | sed -n '/Online,/!p'
)
rm $data
echo "$RESULT"
解释
- grep 感兴趣的行
- 如果未找到搜索模式则打印
推荐阅读
- java - Hive:过滤地图数组
- java - 为什么通过 JPA 更新数据库会回滚?
- php - 如何使用 AJAX 提交表单数据文本和图像
- python - cv2读取视频帧导致python生成器延迟输出直到结束
- java - 使用 Egit 推送时出错:“对等方重置连接:套接字写入错误”
- kubernetes - 在 k8s 中更新秘密后如何检查文件是否更新?
- java - 向下转换错误 (Java)。以下代码似乎不起作用,感谢任何解释
- ruby - 如何使用 rbenv 安装 Ruby 2.5.1
- node.js - 在 React 中显示来自 S3 的图像
- powershell - 使用 PowerShell 查询 Active Directory 并将数据添加到现有 csv 的新列