查找,替换和添加新模式

时间:2017-02-09 04:58:30

标签: awk

我在文件中有以下类型的条目。我可以轻松地将RAW替换为VARCHAR

awk 'BEGIN{IGNORECASE = 1};{gsub(/RAW/,"VARCHAR")}; 1' 

我试图找到一种在替换后添加模式的方法

例如,这是我的数据

COL1    RAW(64)       NOT NULL,    
COL2    RAW(255)      NOT NULL,

这里是所需的数据

COL1    VARCHAR (64)  FOR BIT DATA NOT NULL,    
COL2    VARCHAR (255) FOR BIT DATA NOT NULL,

RAW应替换为VARCHAR - 我可以使用awk执行此部分,但我不知道如何添加FOR BIT DATA

1 个答案:

答案 0 :(得分:0)

如果您使用GNU Awk,则可以使用其gensub()函数严格定义regex匹配以包含这两种模式

awk '{$0=gensub(/(.*)\<RAW\>\(([0-9]+)\)(.*)\<NOT NULL\>/, "\\1VARCHAR (\\2)\tFOR BIT DATA NOT NULL", "g", $0)}1' file

对于输入文件,

cat file
COL1    RAW(64)       NOT NULL,
COL2    RAW(255)      NOT NULL,
COL3    NOTRAW(255)      NOT NULL,

返回

COL1    VARCHAR (64)    FOR BIT DATA NOT NULL,
COL2    VARCHAR (255)   FOR BIT DATA NOT NULL,
COL3    NOTRAW(255)      NOT NULL,

以上需要模式RAWNOT NULL才能提供替换

如果您只想匹配RAW的行,

awk '{$0=gensub(/(.*)\<RAW\>\(([0-9]+)\)(.*)/, "\\1VARCHAR (\\2)\tFOR BIT DATA NOT NULL", "g", $0)}1' file