Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 使用sed命令更改日志文件日期?_Json_Linux_Logging_Sed_Logfile - Fatal编程技术网

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

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 这里的主要问题是,也需要添加日期和时间部分,

我在一个日志文件中多次使用以下行和其他数据。 我喜欢首先将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实现这一点?还是通过另一个控制台命令


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
数组