要求:
我正在尝试为egrep创建2个正则表达式:
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。