【问题标题】:how can I remove the time-stamp from the contents of a log file如何从日志文件的内容中删除时间戳
【发布时间】:2014-04-11 23:51:43
【问题描述】:

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

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

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

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

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

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

谢谢

【问题讨论】:

  • ..%S:后面的条目中是否有冒号?祝你好运。
  • @shellter 是的,在 '%S:' 之后可能会有额外的冒号,它们不是时间戳的一部分

标签: bash scripting debian


【解决方案1】:

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

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

上面查找六组数字,后跟一个分隔符并将它们删除。由于您的时间戳有六个这样的集合(年、月、日、小时、分钟、秒),这就是您想要的。

【讨论】:

  • 哈哈没想到固定字符的事情,我自己就能把那个弄下来。谢谢!
  • 虽然 cut 和 sed 看起来一样快。 cut 更容易阅读。
【解决方案2】:

由于您有 3 个冒号,您不妨将它们用作分隔符。

cut -d":" -f4 log.txt 

【讨论】:

    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 2013-12-03
    • 2020-12-29
    • 2022-01-06
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多