If/then 仅当第二行之后的值

If/then only when values after second line

我正在尝试将被 PF 防火墙列入黑名单的 IP 地址添加到日志中,以便我们随着时间的推移记录它们,最好是 date/time 添加它们。

以下命令显示了我想要捕获的 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 地址)时,才将其写入日志,最好使用date/time 已添加。

抱歉我是新手,非常感谢任何想法或帮助。

尝试将输出输送到 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