【发布时间】:2020-10-05 18:22:15
【问题描述】:
任何人都可以在这里提供帮助。如果 egrep 不可行,其他建议也将受到高度赞赏。
当它位于“UTL_RECOMP_SLAVE_75”字符串的下一行时,我正在尝试使用“UTL_RECOMP_SLAVE_75”将 egrep 表达式写入 grep ORA-00942。然而,文件中任何其他行中的 ORA-00942 应被忽略。仅当 ORA-00942 在下一行中后跟“UTL_RECOMP_SLAVE_75”时,才需要对其进行 grep。
ORA-12012: error on auto execute of job "SYS"."UTL_RECOMP_SLAVE_75"
ORA-00942: <<<<<<<<<<<<<<<<<< should be grepped along with "UTL_RECOMP_SLAVE_75"
ORA-00490: error text is xyz
ORA-00942: <<<<<<<<<<<<<<<< this should be ignored
【问题讨论】:
-
我知道
sed在这类任务上比较好,你调查过吗? -
谢谢亚龙。不,我对 shell 脚本很陌生。您对此有 sed 表达式的任何想法吗?
-
sed 和 grep 都是错误的工具,不能用于涉及搜索多行输入的任何事情。只需使用 awk(或者如果您不介意非标准工具,可以使用 perl、ruby、python 等)
-
@Ed Morton:有一个使用 grep 的自然解决方案正在运行:
grep -A1 UTL_RECOMP_SLAVE_75 inputfile | grep -B1 ORA-00942 -
@LászlóSzilágyi 这不是 grep 的自然解决方案,它是具有 2 个 grep 和一个 shell 管道的解决方案,当 ORA-00942 出现在与 UTL_RECOMP_SLAVE_75 相同的行。