使用命令sed更改日志文件日期?

时间:2015-04-28 08:21:39

标签: json linux logging sed logfile

我在包含其他数据的日志文件中多次使用以下行。 我喜欢先将json部分导入mongodb并运行选定的查询来分析这些数据。

DEBUG 2015-04-18 23:13:23,374 [TEXT] (Class.java:19) - {"a":"1", "b":"2", ...}

要改变数据只是为了获得我使用的json部分:

cat mylog.log | sed "s/DEBUG.*19) - //g" > mylog.json

这里的主要问题是,就像添加日期和时间部分以及另外的json值来得到这样的东西:

{"date": "2015-04-18", "time":"23:13:26,374", "a":"1", "b":"2", ...}

这是主要问题。我怎么能通过使用linux控制台和comman sed来做到这一点?或者通过替代的控制台命令?

事先提前

1 个答案:

答案 0 :(得分:0)

由于这似乎是一种非常严格的格式,你可能会像这样使用sed:

sed 's/DEBUG \([^ ]*\) \([^ ]*\).*19) - {/{ "date": "\1", "time": "\2", /' mylog.log

其中[^ ]*匹配一系列非空格字符,而\(regex\)是一个捕获组,可使匹配的字符串可用于替换为\1\2等等取决于它的位置。您可以在替换部件中看到这些。

如果是我,我会使用Perl将一条线分割成字段并且非贪婪地匹配:

perl -ape 's/.*?{/{ "date": "$F[1]", "time": "$F[2]", /' mylog.log

后者将所有内容替换为第一个{(因为.*?非贪婪匹配)并将其替换为您想要的字符串。 $F[1]$F[2]是该行中第二个和第三个以空格分隔的字段; -a使Perl以这种方式将行拆分为@F数组。