- 论坛徽章:
- 0
|
本帖最后由 xixi_fighting 于 2016-09-08 17:17 编辑
过滤文件:test.log文件中,过期数据即5天前数据全部删除。文本是按日期排列的。
我的思路是,按行搜索到第一个匹配关键字时,将该行至行末完全显示。
=================================================================
文本样例:
*** new case 2016-09-01 ***
we
*** new case 2016-09-02 ***
he
*** new case 2016-09-04 ***
she
*** new case 2016-09-04 ***
how
*** new case 2016-09-05 ***
ttt
*** new case 2016-09-10 ***
teacher's day
*** new case 2016-09-10 ***
end
预期处理效果:
*** new case 2016-09-04 ***
she
*** new case 2016-09-04 ***
how
*** new case 2016-09-05 ***
ttt
*** new case 2016-09-10 ***
teacher's day
*** new case 2016-09-10 ***
end
===================================
我是用sed做的,但是中间有许多问题。
date5=$(date --date='5 days ago' +%Y-%m-%d)
date4=$(date --date='4 days ago' +%Y-%m-%d)
date3=$(date --date='3 days ago' +%Y-%m-%d)
if grep -q $date7 test.log; then
sed -n '/$date5/,$p' test.log
elif grep -q test.log; then
sed -i '/$date4/,$p' test.log
elif grep -q test.log; then
sed -i '/$date3/,$p' test.log
fi
问题1:sed中找到关键字date5,但不可以$date5表示,会认为是行末为date的意思,那么如何表示关键字是上述不确定的日期呢?
问题2:尝试将sed中的关键字改成特定字符‘2016-09-04’,一旦遇到匹配的关键字,都会将后面内容重复一遍,而我只想第一次遇到关键字时,显示关键字所在行之后所有内容,后面不再关心。而且使用sed,只是将符合内容重复,并未实现不符合内容删除的功能。
希望大神解答,或者使用别的方法都可以。
不知道我的描述准确不,毕竟第一次来问问题。
|
|