如何从日志文件的内容中删除时间戳

时间:2014-04-11 23:51:43

标签: bash scripting debian

我有一个日志文件,其中日志文件行前面加上以下时间戳格式:

%Y-%m-%d_%H:%M:%S :(最后一个结肠是故意的)

如何使用sed删除时间戳(通过sed捕获日志文件)?我有一些sed的经验,虽然我不确定最好的方法是什么

编辑:这是标准日志行的样子:

2014-04-12_01:55:12:4391465被禁止。

'12:'之后的所有内容应该在删除时间戳之后保留

谢谢

2 个答案:

答案 0 :(得分:2)

您只需要从行的开头删除固定数量的字符:

sed  's/^.\{20\}//' logfile

如果您的sed支持-r选项(对于OSX,请使用-E),则可以删除反斜杠:

sed -r 's/^.{20}//' logfile

在您的样本行上,上面会产生:

4391465 banned.

只要日期戳中的字符数固定,就不需要sedcut也可以使用:

cut -c21- logfile


复杂案例的解决方案

如果字符数没有修复,也就是说,如果这些数字没有像你那样完全零填充,那么更复杂的sed命令将按顺序排列:

sed 's/^\([0-9]\+[_:-]\)\{6\}//' logfile

上面会查找六组数字,然后是分隔符并将其删除。由于您的时间戳有六个这样的集合(年,月,日,小时,分钟,秒),这可以满足您的需求。

答案 1 :(得分:0)

由于你有3个冒号,你也可以将它们用作分隔符。

cut -d":" -f4 log.txt