您好,我有这种格式的日志文件:
2017-09-13T11:08:27+02:00 {"log":"\u001B[0m\u001B[0m2017-09-13 11:07:58,443 |xte-8| INFO [org.springframework.Something] - asdasdadasdsler] - Executing step: [asdsdsdp]\n"}
如何摆脱所有不必要的东西并将\n 更改为新行,使其看起来像这样:
[0m2017-09-13 11:07:58,443 |xte-8| INFO [org.springframework.Something] - asdasdadasdsler] - Executing step: [asdsdsdp]
(new empty line from \n)
使用 linux 命令?
最佳答案
您可以使用带有正则表达式的 sed
来完成:
sed -i -E 's/[\[A-z0-9\]:\+"]+(\[0m[0-9]{4}[^\\]+)\\n/$1/g' filename
它的作用是:
sed -i -E 's/search/replace/g' filename
在文件filename
中搜索search
,它替换匹配项用replace
,g
代表全局。-i
和-E
的作用可以通过在终端中输入man sed
来查看:-i
替换到位,是指在同一个文件中;-E
代表使用扩展正则表达式。[\[A-z0-9\]:\+"]+
匹配任意字符,任意数字,[
,]
,:
,+
和"
.它会在遇到下一个正则表达式部分时停止。([^\\]+)
将任何不是反斜杠的东西分组,但我们必须使用(\[0m[0-9]{4}[^\\]+)
因为前面的regex部分肯定知道遇到"[0m2017"
就得停下来。此正则表达式将在\n
之前停止。$1
是保存第一组匹配项的变量(我们只有一个组,但如果有更多,它们将存储在$1
、$2
、$3
等,按它们出现的顺序排列)。所以整个输入字符串将被我们在第一组中捕获的内容替换。
关于linux - 使用 Linux 命令从日志中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46195280/