我正在使用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] [########### ]我的问题是,为了进行if语句比较,我如何隔离要分配给变量的58。我在考虑使用sed或regex,但由于这个值会根据ami的不同而不同,并且范围可能在0-100之间,所以我想不出一个直接提取该值的方法。任何帮助都将不胜感激。
发布于 2017-07-20 18:04:36
你可以像这样使用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)发布于 2017-07-20 18:03:33
在shell中执行此操作的计算成本最低的方法是使用POSIX parameter expansion facilities (滚动到该部分的底部),以避免衍生外部进程:
$ var='2017-07-20 10:45:10 Hardening index : [58] [########### ]'
$ var=${var%%\]*} #remove longest endstring starting with ]
$ var=${var##*\[} #remove longest startstring ending with [
$ echo $var
58发布于 2017-07-20 18:10:23
尝试:
sudo cat /var/log/lynis.log | grep "Hardening Index" | sed -r "s/.*?\[([0-9]+)\].*/\1/"https://stackoverflow.com/questions/45211399
复制相似问题