需要一个egrep正则表达式来排除一个单词

时间:2015-01-14 21:07:51

标签: regex grep regex-negation

要求

我正在尝试为egrep创建2个正则表达式:

  1. 扫描Oracle DDL脚本以识别创建PACKAGE主体的文件
  2. 扫描Oracle DDL脚本以识别创建PACKAGE规范的文件
  3. DDL脚本文件中使用的语法是:

    CREATE [OR REPLACE] PACKAGE [BODY] <name> AS

    可选关键字“BODY”表示正文。如果缺少,则假定脚本创建包规范。

    考虑这4个测试文件(名为f1,f2,f3和f4):

    F1:

    CREATE OR REPLACE PACKAGE my_package as

    F2:

    CREATE OR REPLACE PACKAGE my_package as

    F3:

    CREATE OR REPLACE PACKAGE BODY my_package AS

    F4:

    CREATE PACKAGE body my_package AS

    注意 f3在“PACKAGE”和“BODY”之间包含多个空格

    问题

    我有一个很好的工作表达式来识别包体脚本:

    egrep -il 'CREATE[ ]+(OR[ ]+REPLACE[ ]+)?PACKAGE[ ]+BODY'

    现在我需要一个扫描规范脚本(那些在“PACKAGE”之后没有单词“BODY”的脚本。我假设它会是一些语法相同的表达式,上面写着“单词PACKAGE”之后没有“BODY”这个词。

    我试过了:

    egrep -il 'CREATE[ ]+(OR[ ]+REPLACE[ ]+)?PACKAGE[ ]+[^(BODY)]' f*

    上面的命令找到f1,f2和f3。出于某种原因,它可以在“PACKAGE”和“BODY”之间只有一个空格的情况下正常工作,但不能存在多个空格。

    感谢您考虑我的问题。

    -Scott K。

0 个答案:

没有答案