shell - 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
解决方案
这是一个简单的 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
推荐阅读
- google-apps-script - Bit.ly 从 Google Apps 脚本给出 404
- emacs - Emacs 模式行单击更改缓冲区
- android - 更改android芯片图标位置
- ruby - 单击按钮时,我希望将选定的字段 id 传递给给定的路径
- php - PAM 需要 exec/shell_exec 的密码,即使在 /etc/sudoers 中使用 NOPASSWD
- list - Python:我不明白为什么结果中的数字或多或少
- javascript - CSS Long 字体不适合屏幕的问题
- spring - 使用 Kubernetes 冲刺云数据流:BackoffLimit
- reactjs - 无法从“index.js”解析自定义组件的模块
- scala - 如何为多个键值应用 regexp_replace spark 函数?