ファイル内の同じパターンのさまざまな文字列に二重引用符を追加する方法

ファイル内の同じパターンのさまざまな文字列に二重引用符を追加する方法

このようなファイルがあります。

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 )
    ;

sedまたはを使用してどのようにこれを達成できますかawk

答え1

まあ、私はクマに一度だけ餌を与えます。 :) 以下は、sedを使用して可能な解決策です。

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

この質問を3つの部分に分けて考えてみてください。

  1. パターン一致 - 一部の文字列を一致させる必要があります\(\$\$[a-zA-z]*\)

  2. グループを使用して一致を再利用します。これは\(括弧が中間項目について話すものです\)。 「この文字列を一致させると、後で使用したいと思います。

  3. 新しい文字列 - 新しい文字列は、正規表現で一致する必要がある最初のパターンを表す"\1"のと同じです。\1

ちなみに、私は私を"使ってaを脱出しました'\"'

私はあなたが小さな一歩を踏み出し、初心者のためのsedスクリプトを使用し、いくつかのsedレシピを分析することを提案します。

関連情報