如果你熟悉DISA STIG,测试为RHEL-06-000518是
/bin/rpm -Va 2>/dev/null \
| /bin/grep '^.M'
我想要做的就是从该测试中提取文件名,并使用包名称和有问题的文件进行漂亮的输出。但是,我的 awk 没有这样做。这就是我正在尝试的:
/bin/rpm -Va 2>/dev/null \
| grep '^.M' \
| awk '{print ($2 ~ /./ ? $3 : $2)}'
理论上,如果字段 2 是单字符文件类型之一(%config、%documentation 等,请参阅rpm 手册页)
但是,我得到的是文件名 if-and-only-if ($2 ~ /./)。否则,即使我用 0 美元代替最后的 2 美元,我也只是得到一个空行。
我缺少什么?
答案1
你的测试$2 ~ /./
总是正确的,除了$2
空字符串时,即当行中有 0 或 1 个字段时。你应该试试$2 ~ /^.$/
。
您还可以将 grep 和 awk 合二为一:
awk '/^.M/ {print ($2 ~ /^.$/ ? $3 : $2)}'