如何向文件中相同模式的各种字符串添加双引号

如何向文件中相同模式的各种字符串添加双引号

我有一个这样的文件

CREATE TABLE ENTDTA.$$BAPWD (
    PERSID NUMBER(10) DEFAULT 0 NOT NULL ,
    "PASSWORD" CHAR(10) DEFAULT '' NOT NULL ,
    UPDATE_IDENT     NUMBER(7, 0) DEFAULT 0 NOT NULL )
    ;

CREATE TABLE ENTDTA.$$BARTSPH (
    CLORDID NUMBER(10) DEFAULT 0 NOT NULL ,
    CLORDLNID NUMBER(10) DEFAULT 0 NOT NULL ,
    RTSTEPID NUMBER(10) DEFAULT 0 NOT NULL ,
    HLDRSNCDE CHAR(6) DEFAULT '' NOT NULL ,
    HOLDCMNT VARCHAR2(256) DEFAULT '' NOT NULL ,
    HLDUNTDT DATE DEFAULT NULL ,
    UPDATE_IDENT     NUMBER(7, 0) DEFAULT 0 NOT NULL )
    ;

CREATE TABLE ENTDTA.$$BASRCTY (
    OTSRCTC CHAR(6) DEFAULT '' NOT NULL ,
    OTSRCTD CHAR(30) DEFAULT '' NOT NULL ,
    ORLNSTSCD CHAR(6) DEFAULT '' NOT NULL ,
    UPDATE_IDENT     NUMBER(7, 0) DEFAULT 0 NOT NULL )
    ;

CREATE TABLE ENTDTA.$$BAWPDFST (
    H1SCNS NUMBER(7, 0) DEFAULT 0 NOT NULL ,
    OTSRCTC CHAR(6) DEFAULT '' NOT NULL ,
    STYLEID NUMBER(10) DEFAULT 0 NOT NULL ,
    CRTNAM CHAR(50) DEFAULT NULL ,
    CRTTIM TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL ,
    LSTUPDNAM CHAR(50) DEFAULT NULL ,
    LSTUPDTIM TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL ,
    UPDATE_IDENT     NUMBER(7, 0) DEFAULT 0 NOT NULL )
    ;

每当有ENTDTA.$$的东西。 $$something 应该用双引号引起来。输出应该是这样的

CREATE TABLE ENTDTA."$$BAPWD" (
    PERSID NUMBER(10) DEFAULT 0 NOT NULL ,
    "PASSWORD" CHAR(10) DEFAULT '' NOT NULL ,
    UPDATE_IDENT     NUMBER(7, 0) DEFAULT 0 NOT NULL )
    ;

CREATE TABLE ENTDTA."$$BARTSPH" (
    CLORDID NUMBER(10) DEFAULT 0 NOT NULL ,
    CLORDLNID NUMBER(10) DEFAULT 0 NOT NULL ,
    RTSTEPID NUMBER(10) DEFAULT 0 NOT NULL ,
    HLDRSNCDE CHAR(6) DEFAULT '' NOT NULL ,
    HOLDCMNT VARCHAR2(256) DEFAULT '' NOT NULL ,
    HLDUNTDT DATE DEFAULT NULL ,
    UPDATE_IDENT     NUMBER(7, 0) DEFAULT 0 NOT NULL )
    ;

CREATE TABLE ENTDTA."$$BASRCTY" (
    OTSRCTC CHAR(6) DEFAULT '' NOT NULL ,
    OTSRCTD CHAR(30) DEFAULT '' NOT NULL ,
    ORLNSTSCD CHAR(6) DEFAULT '' NOT NULL ,
    UPDATE_IDENT     NUMBER(7, 0) DEFAULT 0 NOT NULL )
    ;

CREATE TABLE ENTDTA."$$BAWPDFST" (
    H1SCNS NUMBER(7, 0) DEFAULT 0 NOT NULL ,
    OTSRCTC CHAR(6) DEFAULT '' NOT NULL ,
    STYLEID NUMBER(10) DEFAULT 0 NOT NULL ,
    CRTNAM CHAR(50) DEFAULT NULL ,
    CRTTIM TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL ,
    LSTUPDNAM CHAR(50) DEFAULT NULL ,
    LSTUPDTIM TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL ,
    UPDATE_IDENT     NUMBER(7, 0) DEFAULT 0 NOT NULL )
    ;

我怎样才能使用sedor来实现这一点awk

答案1

好吧,我只会喂熊一次。 :) 这是使用 sed 的一种可能的解决方案

sed -e 's/\(\$\$[a-zA-z]*\)/'\"'\1'\"'/g' YourFileName

分三部分思考这个问题

  1. 模式匹配 - 你必须匹配一些字符串\(\$\$[a-zA-z]*\)

  2. 使用组重用匹配 - 这就是括号\(中关于中间内容的内容\)。你是在说“嘿,一旦你匹配了这个字符串,我想稍后再使用它。

  3. 新字符串 - 新字符串看起来像"\1"其中\1表示必须在正则表达式中匹配的第一个模式。

仅供参考,如您所见,我"通过使用转义了 a '\"'

我建议您采取一些小步骤,使用一些初学者 sed 脚本并分解一些 sed 配方。

相关内容