【问题标题】:Sed command cannot find my regexSed 命令找不到我的正则表达式
【发布时间】:2018-02-27 23:16:26
【问题描述】:

我必须“清理”一些 oracle DDL 脚本,删除表空间声明,并且我必须自动执行。我尝试使用 '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

但它不起作用,逗号输出与输入相同;如果我在 Sublime 或 regex web tool 上尝试正则表达式,正则表达式会找到我想要的

【问题讨论】:

    标签: regex linux bash oracle


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你可以试试这个

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

      【讨论】:

        猜你喜欢
        • 2013-08-07
        • 2012-10-29
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 2018-05-31
        相关资源
        最近更新 更多