从日志文件中删除日期

时间:2013-04-15 06:07:22

标签: sed awk

我有一个如下的irc日志

04/14/13 21:38<@Hamatti> Lorem ipsum dolor sit amet
04/14/13 21:39<@Hamatti> consectetur adipiscing elit.
04/14/13 21:45<@Hamatti> Duis facilisis convallis lacus

EDIT1 即可。对不起,我的意图并不清楚。所以我希望前面的输出是

21:38<@Hamatti> Lorem ipsum dolor sit amet
21:39<@Hamatti> consectetur adipiscing elit.
21:45<@Hamatti> Duis facilisis convallis lacus

所以时间很重要。

EDIT2 还有部分日志,早期格式为

20:12<@Hamatti> Something.
20:13<@Hamatti> Funny.
20:13<@Hamatti> Happened.

我需要对这些行进行非修改。

由于我的旧日志格式没有日期戳,我想从以后的日志中删除日期。

sed 's/[0-9]{2}\/[0-9]{2}\/[0-9]{2}//g' logfile

sed中的正则表达式似乎适用于正则表达式测试人员,但这个sed没有做任何事情。我想知道问题出在哪里?有关bash工具(sed,awk等)的任何提示都非常受欢迎。由于只有部分日志具有日期,因此我无法使用类似

的内容
awk '{$1 = ""; print}'

因为我首先需要检查。

2 个答案:

答案 0 :(得分:5)

这个sed命令可以完成这项工作:

sed -i.bak 's/^[^<]*//' logfile

编辑:根据您的评论,这只会清除日期部分并保留时间戳:

sed -i.bak 's/^[^ ]* //' logfile

编辑2 :根据您的第二次编辑问题:

sed -i.bak 's#^[0-9]*/[0-9]*/[0-9]* ##' logfile

或者在sed中使用扩展的正则表达式功能:

<强>的Mac:

sed -E -i.bak 's#^[0-9]{1,2}/[0-9]{1,2}/[0-9]{1,2} ##' logfile

<强> Linux的:

sed -r -i.bak 's#^[0-9]{1,2}/[0-9]{1,2}/[0-9]{1,2} ##' logfile

答案 1 :(得分:3)

剪切命令很容易在这里应用:

cut -d " " -f "2-" logfile

这意味着:

如果每一行都用空格分隔(分隔符,-d选项),则从第二行开始,然后从中获取所有项目。