如果/那么只有当第二行之后的值

时间:2015-10-03 19:10:43

标签: bash shell awk sed firewall

我试图将PF防火墙列入黑名单的IP地址添加到日志中,以便我们随时间记录它们,最好是添加日期/时间。

以下命令显示我想要捕获的IP地址:

% pfctl -t bruteforce -T show
No ALTQ support in kernel
ALTQ related functions disabled
   1.2.3.4
   2.3.4.5

但前两行(内核中没有ALTQ支持,ALTQ相关功能已禁用)需要被删除,而且我没有运气与awk,sed或tail这样做。我认为以下内容可能有效,但没有任何乐趣:

% pfctl -t bruteforce -T show | sed 1,2d
No ALTQ support in kernel
ALTQ related functions disabled

我还想知道如何最好地将它编织成if / then语句,这样只有当有结果(即任何IP地址)时,才会将其写入日志,最好是日期/他们被加入的时间。

对于成为这样一个新手而道歉 - 任何想法或帮助都非常感激。

1 个答案:

答案 0 :(得分:1)

尝试将输出汇总到awk并指定您只想要大于'2'的行号NR> 2':

pfctl -t bruteforce -T show | awk 'NR>2'

要将其放入脚本中,可以:

#!/bin/sh

logfile="logfile.txt"

pass=0

for i in $( pfctl -t bruteforce -T show | awk 'NR>2' )
do   # only log the date once
     [ "$pass" -eq 0 ] && { date >> "$logfile" ; pass=1 ; }
     # log the ip addresses to "$logfile" one at a time
     printf "$i\n" >> "$logfile"
done