我有一个日志文件,想要删除所有早于指定日期的条目。然而,我还没有成功。到目前为止我尝试的方法是添加一个输入来指定删除哪些早于该日期的条目,然后像这样循环:
#!/bin/bash
COUNTER=7
DATE=$(date -d "-${COUNTER} days" +%s)
DATE=$(date -d -@${DATE} "+%Y-%m-%d")
while [ -n "$(grep $DATE test.txt)" ]; do
sed -i "/$DATE/d" test.txt
COUNTER=$((${COUNTER}+1))
DATE=$(date -d "-${COUNTER} days" +%s)
DATE=$(date -d @${DATE} +"%Y-%m-%d")
done
这种方法有点小问题,当日期没有对应的日志记录时会失败。如果找不到匹配项,就会中止循环,导致更早的记录被保留。
更新:
我是这样解决的:
#!/bin/bash
COUNTER=$((7+1))
DATE=$(date -d "-${COUNTER} days" +%s)
DATE=$(date -d -@${DATE} "+%Y-%m-%d")
if [ -z "$(grep $DATE test.txt)" ]; then
exit 1
fi
sed -i "1,/$DATE/d" test.txt
find
和-mtime
来完成这个任务。 - Brunologrotate
吗? - OpenSauce