使用Linux命令从日志中提取数据

时间:2017-09-13 10:36:45

标签: linux

您好我有这种格式的日志文件:

  

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] - 执行步骤:[asdsdsdp] \ n"}

如何摆脱不必要的一切,并将\ n更改为新行,以便它看起来像这样:

  

[0m2017-09-13 11:07:58,443 | xte-8 |信息   [org.springframework.Something] - asdasdadasdsler] - 执行步骤:   [asdsdsdp]

     

(来自\ n的新空行)

使用linux命令?

1 个答案:

答案 0 :(得分:1)

您可以使用sed与正则表达式来完成:

sed -i -E 's/[\[A-z0-9\]:\+"]+(\[0m[0-9]{4}[^\\]+)\\n/$1/g' filename

这是做什么的:

  • sed -i -E 's/search/replace/g' filename在文件search中搜索filename,它将匹配替换为replaceg代表全局。通过在您的终端中键入-i可以找到-Eman sed所做的事情:-i替换到位,意味着在同一个文件中; -E代表使用扩展正则表达式。
  • [\[A-z0-9\]:\+"]+匹配任何字符,任意数字,[]:+"。遇到下一个正则表达式部分时它将停止。
  • ([^\\]+)对任何不反斜杠的内容进行分组,但我们必须使用(\[0m[0-9]{4}[^\\]+),因为之前的正则表达式部分必须知道它必须在遇到"[0m2017"时停止。此正则表达式将在\n之前停止。
  • $1是保存第一组匹配的变量(我们只有一个组,但如果有更多,则会存储在$1$2,{{1}按它们发生的顺序等)。因此整个输入字符串将被我们在第一组中捕获的内容所取代。