我必须"清洁"一些oracle DDL scrpits,删除表空间声明,我必须自动完成。我尝试使用' sed' linux命令和正则表达式,但正则表达式似乎不起作用:
输入:
CREATE TABLE "DTCUSR"."AFP_RESOURCE"
( "RSC_ID" NUMBER(12,0),
"RSC_CLASS" VARCHAR2(5 BYTE),
"RSC_NAME" VARCHAR2(8 BYTE),
"RSC_MD5" VARCHAR2(32 BYTE),
"RSC_TYPE" VARCHAR2(50 BYTE),
"RSC_INSERT_DATE" TIMESTAMP (6)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "DTC_DATA" ;
想要出去:
CREATE TABLE "DTCUSR"."AFP_RESOURCE"
( "RSC_ID" NUMBER(12,0),
"RSC_CLASS" VARCHAR2(5 BYTE),
"RSC_NAME" VARCHAR2(8 BYTE),
"RSC_MD5" VARCHAR2(32 BYTE),
"RSC_TYPE" VARCHAR2(50 BYTE),
"RSC_INSERT_DATE" TIMESTAMP (6)
);
linux命令
$ sed "/(?s)SEGMENT CREATION.*?;/;/" afp_resource.sql
但它不起作用,commad输出与输入相同;如果我在Sublime或regex web tool上试用正则表达式,正则表达式找到我想要的东西
答案 0 :(得分:0)
我可以想到两个步骤来规避
sed -i '/SEGMENT/,$ d' afp_resource.sql
sed -i '$ a\);' afp_resource.sql
答案 1 :(得分:0)
你可以试试这个
sed '/SEGMENT/,/;$/c);' afp_resource.sql