Regex Linux,Grep到不带字符的数学字符串

Regex Linux,Grep到不带字符的数学字符串,regex,linux,grep,Regex,Linux,Grep,我正在尝试安装。 linux服务器上有一个构建过程,它将日志放入文件中 处理完所有文件后,会有一个命令,检查文本文件是否包含ORA-字符串 问题是,在log4plsql代码中实际上包含一个ORA-: 例如,在此日志中: BEGIN checkAndInitCTX(pCTX); LLTEXT := 'SQLCODE:'||SQLCODE ||' SQLERRM:'||SQLERRM || CHR(10) || 'Error back trac

我正在尝试安装。 linux服务器上有一个构建过程,它将日志放入文件中

处理完所有文件后,会有一个命令,检查文本文件是否包含ORA-字符串

问题是,在log4plsql代码中实际上包含一个ORA-:

例如,在此日志中:

BEGIN
       checkAndInitCTX(pCTX);
       LLTEXT :=   'SQLCODE:'||SQLCODE ||' SQLERRM:'||SQLERRM || CHR(10) ||
            'Error back trace:' || CHR(10) ||
             replace(dbms_utility.format_error_backtrace, 'ORA-06512: ', '');
       log(pLEVEL => PLOGPARAM.DEFAULT_FT_ERR_BTRACE_LEVEL, pCTX => pCTX,  pTEXT => LLTEXT );
END full_error_backtrace;
ORA-00955: name is already being used by existing object
我的grep找不到任何ORA


有人有主意了吗?

尝试使用-p作为perl兼容的正则表达式


grep-p“^ORA-\'ORA”log

问题是,当您将
[^']
添加到正则表达式
grep
时,需要在
ORA-
的左侧有一个字符,但是-由于在发生真正错误的情况下,模式可能位于行的开头-它可能无法找到一个字符(正如上面的例子所示)

一些正则表达式大师可能有一个更优雅的解决方案,但以下几点对我很有用:

grep -E "(^|[^'])ORA-" output.log
这将匹配以
ORA-
开头的行,或包含前面有除
以外的任何字符的模式
ORA-

我的
grep
版本:

$ grep --version
grep (GNU grep) 2.27

如果我读得正确,那么假设所有错误都有一行以“ORA”开头,我们可以
grep“^ORA-”
?该
^
匹配该行的开头。
grep -E "(^|[^'])ORA-" output.log
$ grep --version
grep (GNU grep) 2.27