【问题标题】:grep Exception but exclude specific Exceptiongrep 异常但排除特定异常
【发布时间】:2012-06-02 13:28:54
【问题描述】:

我目前正在匹配文件中的“Exception”,使用前后输出10行:

grep -C 10 "[.*Exception"

但是现在我想排除某些特定的异常,比如 AAAExceptionBBBException,我该怎么做它?可以通过

grep -v "AAAException" | grep -C 10 "[.*异常"

但如果在文件中,我有 AAAException 在 10 行之内的其他异常,该行将不会包含在输出中,这不是我想要的.我怎么能不匹配 AAAException,但如果它发生在其他 Exception 的 10 行之内,它仍然会包含在输出中?

【问题讨论】:

    标签: regex shell unix grep


    【解决方案1】:

    如果您的肯定匹配模式 Exception 是一个单词,即没有在其他字母之前/之后,那么您可以使用单词边界。

    $ grep -C 10 '\<NullPointerException\>\|\<SessionTimeoutException\>'
    

    【讨论】:

    • 它可以是任何类型的异常,比如 NullPointerException 或 SessionTimeoutException
    • 如果你有 +ve *Exception 的列表,你可以 OR with |
    • 我不明白你的意思“OR with |”,但是在现阶段,我有一个排除列表
    • 如果我有一个肯定列表,那将起作用,但我有一个否定列表。这意味着我需要匹配除 NullPointerException 或 SessionTimeoutException 之外的所有异常
    • 你不能用普通的 grep 来实现,检查@tripleee 解决方案。
    【解决方案2】:

    如果你有grep -P,你可以指定一个否定的lookbehind断言。

    grep -C 10 -P '\[.*(?<!AAA|BBB)Exception' 
    

    【讨论】:

    • 基本意思是“这里前面的文字不能是”。
    • 它将提高答案的质量,如果可以请说明您使用的这个正则表达式。谢谢!
    • 你能告诉我\[是什么意思吗?
    • 反斜杠使下一个字符变成文字;没有它,[ 在正则表达式中有特殊的含义(定义一个像[^a-z] 这样的字符类)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    相关资源
    最近更新 更多