我正在尝试安装LOG4PLSQL。 linux服务器上有一个构建过程,该过程将日志放入文件中。
处理完所有文件后,有一个命令可以检查文本文件是否包含 ORA-字符串,
问题是,在log4plsql中,代码实际上包含一个 ORA-:
BEGIN
build 20-Jun-2018 09:22:28 1960 checkAndInitCTX(pCTX);
build 20-Jun-2018 09:22:28 1961 LLTEXT := 'SQLCODE:'||SQLCODE ||' SQLERRM:'||SQLERRM || CHR(10) ||
build 20-Jun-2018 09:22:28 1962 'Error back trace:' || CHR(10) ||
build 20-Jun-2018 09:22:28 1963 replace(dbms_utility.format_error_backtrace, 'ORA-06512: ', ''); -- <<<<<<<<<<
build 20-Jun-2018 09:22:28 1964 log(pLEVEL => PLOGPARAM.DEFAULT_FT_ERR_BTRACE_LEVEL, pCTX => pCTX, pTEXT => LLTEXT );
build 20-Jun-2018 09:22:28 1965 END full_error_backtrace;
build 20-Jun-2018 09:22:28 1966
build 20-Jun-2018 09:22:28 1967
build 20-Jun-2018 09:22:28 1968 FUNCTION getLOG4PLSQVersion
build 20-Jun-2018 09:22:28 1969 RETURN VARCHAR2
尽管构建没有错误,但此grep函数在程序包代码中找到一个并将其视为错误。
负责查找ORA的Grep:grep "ORA-"
我将其修改为:grep "[^']ORA-"
和带有'('ORA-)的ORA-现在是不可见的,但是不可见也是实际的错误:
ORA-00955: name is already being used by existing object
例如,在此日志中:
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。
有人有主意吗?
答案 0 :(得分:1)
问题是,当您将[^']
添加到正则表达式grep
时,期望在ORA-
的左侧有一个字符,但是-因为该模式可能在开头如果发生真正错误,则该行中的行-可能无法找到行(如上面示例中所做的那样)。
某些正则表达式大师可能有一个更优雅的解决方案,但以下对我有用:
grep -E "(^|[^'])ORA-" output.log
这将匹配开始与ORA-
或的行,其中包含模式ORA-
并以除{{1之外的任何字符}} 。
我的'
版本:
grep
答案 1 :(得分:0)
尝试将-P用于与perl兼容的正则表达式
grep -P“ ^ ORA- | \'ORA”日志