awk - 查找没有关键字的行/在给定的行对中

标签 awk sed grep

尝试过滤未启用日志的防火墙安全策略。

我刚刚对策略进行了 GREP 处理,该策略提供了与“操作和日志设置”匹配的策略的输出。但我不知道有什么过滤机制。

#zcat config.gz | egrep permit\|deny\|log | grep policy 
set security policies from-zone Trust to-zone Untrust policy 44 then permit  
set security policies from-zone Trust to-zone Untrust policy 44 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 34 then permit  
set security policies from-zone Trust to-zone Untrust policy 34 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 82 then permit  
set security policies from-zone Trust to-zone Untrust policy 82 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 82 then log session-close  
set security policies from-zone Trust to-zone Untrust policy 73 then deny  
set security policies from-zone Trust to-zone Untrust policy 73 then log session-close  
set security policies from-zone Trust to-zone Untrust policy 72 then deny  
set security policies from-zone Trust to-zone Untrust policy 72 then log session-close  
set security policies from-zone Trust to-zone Untrust policy 67 then permit  
set security policies from-zone Trust to-zone Untrust policy 53 then permit  
set security policies from-zone Trust to-zone Untrust policy 53 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 30 then deny  
set security policies from-zone Trust to-zone Untrust policy 30 then log session-close  
set security policies from-zone Trust to-zone Untrust policy 75 then permit  
set security policies from-zone Trust to-zone Untrust policy 75 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 76 then permit  
set security policies from-zone Trust to-zone Untrust policy 28 then permit  
set security policies from-zone Trust to-zone Untrust policy 28 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 50 then permit  
set security policies from-zone Trust to-zone Untrust policy 50 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 51 then permit  
set security policies from-zone Trust to-zone Untrust policy 51 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 55 then permit  
set security policies from-zone Trust to-zone Untrust policy 55 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 56 then permit  
set security policies from-zone Trust to-zone Untrust policy 79 then permit  
set security policies from-zone Trust to-zone Untrust policy 79 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 57 then permit  
set security policies from-zone Trust to-zone Untrust policy 57 then log session-init  
set security policies from-zone Trust to-zone Untrust policy 58 then permit  
set security policies from-zone Trust to-zone Untrust policy 58 then log session-init

我想知道没有启用日志的策略。

示例: “策略 67”只有允许语句但未记录。 应过滤并显示策略名称。

最佳答案

使用 GNU awk 实现真正的多维数组:

$ cat tst.awk
/permit|deny|log/ && /policy/ { present[$9][$11] }
END {
    for (policy in present) {
        if ( !( "log" in present[policy] ) ) {
            print policy
        }
    }
}

$ awk -f tst.awk file
56
67
76

使用任何 awk:

$ cat tst.awk
/permit|deny|log/ && /policy/ { policies[$9]; present[$9,$11] }
END {
    for (policy in policies) {
        if ( !( (policy,"log") in present ) ) {
            print policy
        }
    }
}

通过上述方法,您可以编写 if 语句来测试您喜欢的每个策略的任何状态组合。

关于awk - 查找没有关键字的行/在给定的行对中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55844671/

相关文章:

sed - 转义单引号

regex - 使用正则表达式在 bash 中进行 Grep

linux - Bash Grep 行中的数值常量

awk - 如何使用awk将第一列和第二列的第一行打印为单列?

linux - 命令 "echo"在 awk 中无效

bash - 列出文本文件中所有不同字符的脚本

regex - 我如何用 sed 表达这个正则表达式?

shell - "inplace"shell命令的包装器

linux - 关于两种情况之间的 grep 选项

linux - Masscan输出仅获取ip:port并保存到文件中?