파일에서 동일한 패턴의 다양한 문자열에 큰따옴표를 추가하는 방법

파일에서 동일한 패턴의 다양한 문자열에 큰따옴표를 추가하는 방법

이런 파일이 있어요

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

이 질문을 세 부분으로 나누어 생각해 보세요.

  1. 패턴 일치 - 일부 문자열을 일치시켜야 합니다 \(\$\$[a-zA-z]*\).

  2. 그룹을 사용하여 일치 항목을 재사용합니다. 이는 \(괄호가 중간 항목에 대해 말하는 것입니다 \). "이 문자열을 일치시키면 나중에 사용하고 싶습니다.

  3. 새 문자열 - 새 문자열은 정규식에서 일치해야 하는 첫 번째 패턴을 나타내는 "\1"것과 같습니다 .\1

참고로 보시다시피 저는 "를 사용하여 a를 탈출했습니다 '\"'.

나는 당신이 작은 발걸음을 내딛고, 초보자용 sed 스크립트를 사용하고, 몇 가지 sed 레시피를 분석하는 것을 제안합니다.

관련 정보