如何创建与CREATE BITMAP(...)匹配的正则表达式; DML在多个文件中?

时间:2014-12-19 14:36:33

标签: regex grep

我有几个DDL脚本包含如下行:

CREATE TABLE (...) TABLESPACE MY_TABLESPACE;

CREATE INDEX MY_SCHEMA.MY_TABLE_REGULAR_INDEX_1 
  ON MY_SCHEMA.MY_TABLE (MY_COLUMN1) TABLESPACE MY_TABLESPACE;

CREATE BITMAP INDEX MY_SCHEMA.MY_TABLE_BITMAP_INDEX_1
  ON MY_SCHEMA.MY_TABLE (MY_COLUMN2) TABLESPACE MY_TABLESPACE;

CREATE INDEX MY_SCHEMA.MY_TABLE_REGULAR_INDEX_2
  ON MY_SCHEMA.MY_TABLE (MY_COLUMN3) TABLESPACE MY_TABLESPACE;

由于有几个脚本,我想创建一个grep正则表达式,它将匹配以 CREATE BITMAP INDEX MY_SCHEMA.MY_TABLE_BITMAP_INDEX_1 ON MY_SCHEMA.MY_TABLE(MY_COLUMN)TABLESPACE MY_TABLESPACE; 开头的整个DML命令,为了创建一个维护脚本。

1 个答案:

答案 0 :(得分:1)

通过grep,

获取以CREATE BITMAP开头的命令
$ grep -oPz 'CREATE BITMAP[\S\s]*?;$' file
CREATE BITMAP INDEX MY_SCHEMA.MY_TABLE_BITMAP_INDEX_1
  ON MY_SCHEMA.MY_TABLE (MY_COLUMN2) TABLESPACE MY_TABLESPACE;

来自man grep

-Z, --null                print 0 byte after FILE name
-o, --only-matching       show only the part of a line matching PATTERN
-P, --perl-regexp         PATTERN is a Perl regular expression