gpt4 book ai didi

regex - Linux,Grep 到没有字符的数学字符串

转载 作者:太空宇宙 更新时间:2023-11-04 10:08:02 24 4
gpt4 key购买 nike

我正在尝试安装 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 函数在包代码中找到一个错误并将其视为错误。

Grep 负责查找 ORA:grep "ORA-"我修改为:grep "[^']ORA-"

和 ORA- with ' ('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。

有人有想法吗?

最佳答案

问题是,当您添加 [^']到正则表达式 grepORA- 的左侧需要一个字符,但是 - 由于在出现真正错误的情况下模式可能位于行的开头 - 它可能无法找到一个(如上面示例中所做的那样)。

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

grep -E "(^|[^'])ORA-" output.log

这将匹配 ORA- 开头的行包含模式ORA-' 以外的任何字符开头.

我的 grep版本:

$ grep --version
grep (GNU grep) 2.27

关于regex - Linux,Grep 到没有字符的数学字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50944190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com