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