Sed命令找不到我的正则表达式

时间:2017-09-19 08:47:14

标签: regex linux bash oracle

我必须"清洁"一些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上试用正则表达式,正则表达式找到我想要的东西

2 个答案:

答案 0 :(得分:0)

我可以想到两个步骤来规避

 sed -i '/SEGMENT/,$ d' afp_resource.sql
 sed -i '$ a\);' afp_resource.sql

答案 1 :(得分:0)

你可以试试这个

sed '/SEGMENT/,/;$/c);' afp_resource.sql