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
我有一个日志文件,其中包含格式如下的行。我正在尝试在 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