LInux 用于删除与日期匹配的行的脚本

LInux Script to remove lines that match dates

我有一个日志文件,其中包含格式如下的行。我正在尝试在 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 and Kibana & Elastic search 来解析和过滤日志。

不过,我制作了一个简单的脚本,它只打印从您作为参数传递的那一天到当前日期的条目,

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

#!/usr/bin/env bash

file=""
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