需要grep语句来排除行

时间:2016-09-13 06:42:55

标签: bash shell grep

我在“打开”模式下运行ufw只是为了收集统计信息以查看是否有任何尝试访问服务器。 UFW正在“中等”日志记录中运行,因此我可以看到对服务器的所有访问。当我检查ufw.log时,我需要手动浏览整个列表。

我目前使用:

grep 'IN=eth0' uwf.log

但这仍然留下太多记录让我手动检查

我真正需要的是:

  • Grep必须只查找包含IN = eth0的行(此部分为 容易)
  • Grep必须IGNORE行,SRC = 0.0.0.0(这些是dhcp广播)
  • Grep必须使用SRC = 10.0.1.15的IGNORE行(10.0.X.X是我的Nagios检查ftp服务)

有人可以帮忙,

谢谢。

3 个答案:

答案 0 :(得分:3)

grep -v:这将使grep排除与模式匹配的行    grep -E:这将使grep接受正则表达式(在这种情况下有多种可能性 - 由管道分隔)。

grep "IN=eth0" uwf.log |grep -Ev 'SRC=0\.0\.0\.0|SRC=10\.0\.1\.15'

答案 1 :(得分:3)

我会使用awk

awk '/IN=eth0/ && !/SRC=0\.0\.0\.0/ && !/SRC=10\.0\.1\.15/' uwf.log

由于awk支持布尔运算,因此可以用非常简单的方式表达多个条件。

答案 2 :(得分:0)

使用GNU sed:

sed -rn '/IN=eth0/{/(SRC=0\.0\.0\.0|SRC=10\.0\.1\.15)/!p}' uwf.log