我有一个这样的文件
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
or来实现这一点awk
?
答案1
好吧,我只会喂熊一次。 :) 这是使用 sed 的一种可能的解决方案
sed -e 's/\(\$\$[a-zA-z]*\)/'\"'\1'\"'/g' YourFileName
分三部分思考这个问题
模式匹配 - 你必须匹配一些字符串
\(\$\$[a-zA-z]*\)
。使用组重用匹配 - 这就是括号
\(
中关于中间内容的内容\)
。你是在说“嘿,一旦你匹配了这个字符串,我想稍后再使用它。新字符串 - 新字符串看起来像
"\1"
其中\1
表示必须在正则表达式中匹配的第一个模式。
仅供参考,如您所见,我"
通过使用转义了 a '\"'
。
我建议您采取一些小步骤,使用一些初学者 sed 脚本并分解一些 sed 配方。