删除与日期匹配的行的Linux脚本



我有一个日志文件,其中包含如下格式的行。我正在尝试在Linux中创建一个脚本,该脚本将删除当前日期x天之前的行。

Wed Jan 26 10:44:35 2022 : Auth: (72448)   Login incorrect (mschap: MS-CHAP2-Response is incorrect): [martin.zeus] (from client CoreNetwork port 0 via TLS tunnel)    
Wed Jan 16 10:45:32 2022 : Auth: (72482) Login OK: [george.kye] (from client CoreNetwork port 5 cli CA-93-F0-6C-7E-77)

我认为你应该看看logrotate和Kibana&用于解析和筛选日志的弹性搜索。

尽管如此,我还是制作了一个简单的脚本,只打印从您作为参数通过的那一天到当前日期的条目,

例如,这将只打印最近5天以来的日志。bash filter.sh log.txt 5

#!/usr/bin/env bash
file="${1}"
days="${2:-1}"
epoch_days=$(date -d "now -${days} days" +%s)
OFS=$IFS
IFS=$'n'
while read line; do
epoch_log=$(date --date="$(echo $line | cut -d':' -f1,2,3)" +%s)
if [ ${epoch_log} -ge ${epoch_days} ]; then
echo ${line}
fi
done < ${file}
IFS=$OFS

最新更新