3

我有一个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

编辑1。对不起,我不清楚我的意图。所以我希望前一个的输出是

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}'

因为我需要先检查。

4

2 回答 2

6

这个 sed 命令将完成这项工作:

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

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

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

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

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

或者在 sed 中使用扩展的正则表达式功能,如下所示:

苹果电脑:

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
于 2013-04-15T06:24:01.190 回答
3

cut 命令在这里很容易应用:

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

它的意思是:

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

于 2018-04-10T17:29:16.917 回答