我在包含其他数据的日志文件中多次使用以下行。 我喜欢先将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来做到这一点?或者通过替代的控制台命令?
事先提前答案 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
数组。