Json 使用sed命令更改日志文件日期?
我在一个日志文件中多次使用以下行和其他数据。 我喜欢首先将json部分导入mongodb并在其上运行所选查询来分析这些数据Json 使用sed命令更改日志文件日期?,json,linux,logging,sed,logfile,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 这里的主要问题是,也需要添加日期和时间部分,
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实现这一点?还是通过另一个控制台命令
thx预先由于这似乎是一种非常严格的格式,您可能会像这样使用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
数组