首页 > 解决方案 > shell脚本中的egrep

问题描述

任何人都可以在这里帮忙。如果 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

标签: shellscriptinggrep

解决方案


这是一个简单的 grep 解决方案。

grep -A1 UTL_RECOMP_SLAVE_75 inputfile | grep -B1 ORA-00942

你可以用两块grep来做到这一点。因为 grep 有一个方便的选项-An-Bn.

例如: grep UTL_RECOMP_SLAVE_75 -A3 inputfile

在匹配行之后打印 3 行尾随上下文,-Bn 选项是:在匹配行之前打印 n 行前导上下文。
请阅读man grep

在这个答案中,我将第一个 grep 传递给了第二个。但是您也可以分两步使用 tmp_file 而不是管道来查看 grep 命令的工作原理。

grep -A1 UTL_RECOMP_SLAVE_75 inputfile >tmp_file
grep -B1 ORA-00942 tmp_file

如果需要,您可以更精确地进行匹配。例如:

grep -A1 -w UTL_RECOMP_SLAVE_75 inputfile | grep -B1 -w ^ORA-00942

推荐阅读