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

标签 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] - 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,它替换匹配项用replaceg代表全局。 -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/

相关文章:

java - 从 Java Runtime.getRuntime 执行 linux mutt 不发送邮件也没有给出错误

linux - 如何删除每行中的第一个逗号并将其替换为空格?

c - 读取C中缓冲区的特定部分

linux - 如何获取进程 ID 以杀死 nohup 进程?

java - 路径中的 Ant 大写与小写字符

linux - 在 Linux 中转储进程的页表条目

c - Linux framebuffer像素位域通用实现

linux - Linux 上的 Flex 构建器

java.io.IOException : Permission denied but file is created 异常

python - 如何使用pexpect自动输入ssh私钥密码