我有几个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命令,为了创建一个维护脚本。
答案 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