linux - 如何仅从 grepping 返回特定文本

标签 linux bash terminal grep

<分区>

我对 Linux Bash 脚本编写还很陌生,我现在正在做的是在日志文件中查找错误。我怎样才能只返回每个日志的时间而不是显示它的所有详细信息?以下是我的代码:

grep -n "Servlet.service() for servlet default threw exception" error 

日志文件的结果之一:

337:17:44:59,136 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/mobilelife].[default]] (http-/0.0.0.0:28080-32) JBWEB000236: Servlet.service() for servlet default threw exception:java.lang.reflect.UndeclaredThrowableException

而我想要的结果只是时间,17:44:59,有人可以帮忙吗?

最佳答案

如果您要搜索日志文件中的特定文本,例如:Servlet.service() for servlet default throw exception,文件中有许多其他条目,您将需要消除打印除包含搜索字符串的行之外的所有其他行,然后仅从该行输出相关时间。你可以用类似的东西来做到这一点:

sed -n '/Servlet.service() for servlet default threw exception/s/^[^:]*:\([^,]*\).*$/\1/p' log.file

基本上:

  • -n 禁止打印模式空间

  • /your search string/ 在文件中找到特定的字符串

  • s/^[^:]*:\([^,]*\).*$/\1/ 只获取时间 反向引用

  • p 打印该行

示例日志文件内容

$ cat log.file
37:17:44:59,136 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/mobilelife].[default]] (http-/0.0.0.0:28080-32) JBWEB000236: Servlet.service() for servlet default threw exception:java.lang.reflect.UndeclaredThrowableException
37:17:45:00,136 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/mobilelife].[default]] (http-/0.0.0.0:28080-32) JBWEB000236: Servlet.service1() for servlet default threw exception:java.lang.reflect.UndeclaredThrowableException
37:17:45:01,136 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/mobilelife].[default]] (http-/0.0.0.0:28080-32) JBWEB000236: Servlet.service2() for servlet default threw exception:java.lang.reflect.UndeclaredThrowableException

sed 使用/输出

$ sed -n '/Servlet.service() for servlet default threw exception/s/^[^:]*:\([^,]*\).*$/\1/p' log.file
17:44:59

关于linux - 如何仅从 grepping 返回特定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36050349/

相关文章:

linux - Linux 中的 grep 空白字段

java - 在 Linux 上的 Scala 中锁定和写入文件的最佳方式

c - 如何将 execvp 结果作为字符串存储在 char 数组中

linux - 如何打印索引为 24 的文件描述符总数

Linux shell 输出命令到文件

linux - TERM=linux 中 ctrl + 箭头(左、右、...)的终端转义序列是什么

linux - 在Linux中如何找到大于特定数字的变量?

linux - Shell 脚本 - 意外 token `then'

git - 如何退出我的 git 提交消息?我不在 VIM 中,我使用了 "commit -m "命令

node.js - npm install -g less 不起作用 : EACCES: permission denied