使用命令 sed 更改日志文件日期?
Alter log file date with the command sed?
我在包含其他数据的日志文件中多次出现以下行。
我喜欢通过首先将 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 控制台和命令 sed 来做到这一点?或者通过替代控制台命令?
提前谢谢
由于这似乎是一种非常严格的格式,您可以像这样使用 sed:
sed 's/DEBUG \([^ ]*\) \([^ ]*\).*19) - {/{ "date": "", "time": "", /' mylog.log
其中 [^ ]*
匹配一系列非 space 字符,\(regex\)
是一个捕获组,使匹配的字符串可用于替换为 </code> , <code>
, 等等取决于它的位置。你可以看到这些用于替换部分。
不过,如果是我,我会使用 Perl,因为它能够将一行拆分为字段并进行非贪婪匹配:
perl -ape 's/.*?{/{ "date": "$F[1]", "time": "$F[2]", /' mylog.log
后者替换第一个{
之前的所有内容(因为.*?
非贪婪地匹配)并将其替换为您想要的字符串。 $F[1]
和 $F[2]
是该行中第二个和第三个以白色 space 分隔的字段; -a
使 Perl 以这种方式将行拆分为 @F
数组。
我在包含其他数据的日志文件中多次出现以下行。 我喜欢通过首先将 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 控制台和命令 sed 来做到这一点?或者通过替代控制台命令?
提前谢谢
由于这似乎是一种非常严格的格式,您可以像这样使用 sed:
sed 's/DEBUG \([^ ]*\) \([^ ]*\).*19) - {/{ "date": "", "time": "", /' mylog.log
其中 [^ ]*
匹配一系列非 space 字符,\(regex\)
是一个捕获组,使匹配的字符串可用于替换为 </code> , <code>
, 等等取决于它的位置。你可以看到这些用于替换部分。
不过,如果是我,我会使用 Perl,因为它能够将一行拆分为字段并进行非贪婪匹配:
perl -ape 's/.*?{/{ "date": "$F[1]", "time": "$F[2]", /' mylog.log
后者替换第一个{
之前的所有内容(因为.*?
非贪婪地匹配)并将其替换为您想要的字符串。 $F[1]
和 $F[2]
是该行中第二个和第三个以白色 space 分隔的字段; -a
使 Perl 以这种方式将行拆分为 @F
数组。