grep 所有内容,直到并包括一个模式

grep 所有内容,直到并包括一个模式

假设我有一个包含异常的日志文件,如图所示

java.lang.NullPointerException blabla
ABC.Exception blalabbla
dogchacecat.Exception yadayada

我希望能够输出从头到尾(包括)“异常”的每一行

期望的输出:

java.lang.NullPointerException
ABC.Exception
dogchacecat.Exception

如何使用任何 GNU 工具(grep、awk、sed)执行此操作?谢谢你!

答案1

使用grep

grep -o '.*Exception' file

-o, --仅匹配
仅打印行的匹配部分。

'.*Exception'
这将匹配 0 次到无限次出现的任何字符(行终止符除外),直到单词“Exception”


为了获得您在评论中提到的行为(拉动之前的字符串并包括Exception直到任何前导空格),您可以使用扩展或 perl 正则表达式来使用\S控制字符(任何非空格字符):

grep -oE '\S+Exception' file

答案2

使用 POSIX 实用程序(因此可以与 GNU 和非 GNU 实现一起使用):

一切直到第一的Exception一行中出现:

sed -n 's/\(Exception\).*/\1/p'

一切直到最后的发生:

sed -n 's/\(.*Exception\).*/\1/p'

如果您想保留(未修改)不包含 的行,请删除-n和。pException

答案3

和你的最喜欢的标准编辑器,ed:

ed -s input <<< $'1,$s/Exception.*/Exception/\nw\nq'

input这将使用此处的命令字符串列表编辑输入文件,即:

  1. 1,$-- 文件中的每一行(从 1 到结尾$),
  2. s/Exception.*/Exception/-- 搜索并替换字符串“Exception”,后跟任何内容 ( .*),仅使用单词“Exception”
  3. w-- 将文件写回磁盘
  4. q——退出编辑

相关内容