我使用lynis来审核我正在使用的AMI。在lynis运行之后,它会写入/var/log/lynis.log并提供一个"强化指数"得分以评估ami的整体强化。
我通过运行sudo cat /var/log/lynis.log | grep "Hardening Index"
反过来又给了我这句话:
2017-07-20 10:45:10 Hardening index : [58] [########### ]
我的问题是如何将58分配给变量以进行if语句比较。我正在考虑使用sed或regex,但因为这个值会因ami而异,并且可能在0到100之间,我不能想到一种只提取该值的方法。任何帮助,将不胜感激。
答案 0 :(得分:3)
您可以使用awk
,甚至可以跳过grep
和cat
这样的内容:
awk -F '[][]+' '/Hardening [Ii]ndex/{print $2}' var/log/lynis.log
58
此awk
使用[
或]
作为字段分隔符,并提取匹配Hardening [Ii]ndex
正则表达式的记录的第二个字段。
将其存储在变量中:
var=$(awk -F '[][]+' '/Hardening [Ii]ndex/{print $2}' var/log/lynis.log)
答案 1 :(得分:2)
在shell中执行此操作的计算上最便宜的方法是使用POSIX parameter expansion facilities(滚动到该部分的底部)以避免产生外部进程:
round(self.d_n, 2)
答案 2 :(得分:0)
尝试:
sudo cat /var/log/lynis.log | grep "Hardening Index" | sed -r "s/.*?\[([0-9]+)\].*/\1/"
答案 3 :(得分:0)
尝试一次跟随awk。
awk '{match($0,/Harden[Ii]ng index.[^\]]*/);print substr($0,RSTART+RLENGTH-2,2)}' Input_file
答案 4 :(得分:0)
sudo cat /var/log/lynis.log | grep "Hardening [Ii]ndex"|sed -r 's/[^[]*\[([^]]*).*/\1/'