Bash从行的输出中排除一行与某个文本匹配

时间:2015-01-07 22:50:50

标签: linux bash awk

我希望创建一个cronjob,如果某个目录通过扫描日志文件发送了一定数量的电子邮件,它将提醒我们。我正在使用的一个班轮是:

awk '$3 ~ /^cwd/{print $3}' /var/log/exim_mainlog | sort | uniq -c | sed "s|^ *||g" | sort -nr | head --lines 5

在我进一步讨论之前,我需要从输出中排除一些位置,例如:

50992 cwd=/var/spool/exim
21960 cwd=/home/USER1/public_html/wp-content/cache/object/000000/746
2717 cwd=/etc/csf
2063 cwd=/home/USER2
1072 cwd=/

我需要排除:

1072 cwd=/
2717 cwd=/etc/csf
50992 cwd=/var/spool/exim

我是否需要将输出附加到txt文件然后使用SED或者是否有更简单的方法?

1 个答案:

答案 0 :(得分:2)

通过grep -v管道以排除匹配项:

egrep -v ' cwd=(/$|/etc/csf|/var/spool/exim)'