このようなファイルがあります。
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つの部分に分けて考えてみてください。
パターン一致 - 一部の文字列を一致させる必要があります
\(\$\$[a-zA-z]*\)
。グループを使用して一致を再利用します。これは
\(
括弧が中間項目について話すものです\)
。 「この文字列を一致させると、後で使用したいと思います。新しい文字列 - 新しい文字列は、正規表現で一致する必要がある最初のパターンを表す
"\1"
のと同じです。\1
ちなみに、私は私を"
使ってaを脱出しました'\"'
。
私はあなたが小さな一歩を踏み出し、初心者のためのsedスクリプトを使用し、いくつかのsedレシピを分析することを提案します。