我需要插入' - '如果行包含单词VARCHAR(1000)
,则在行的开头我的档案样本是:
TRIM(CAST(" AP_RQ_MSG_TYPE_ID" AS NVARCHAR(1000)))AP_RQ_MSG_TYPE_ID, TRIM(CAST(" AP_RQ_PROCESSING_CD" AS NVARCHAR(1000))) AP_RQ_PROCESSING_CD,TRIM(CAST(" AP_RQ_ACQ_INST_ID" AS NVARCHAR(11))) AP_RQ_ACQ_INST_ID,TRIM(CAST(" AP_RQ_LOCAL_TXN_TIME" AS NVARCHAR(10))) AP_RQ_LOCAL_TXN_TIME,TRIM(CAST(" AP_RQ_LOCAL_TXN_DATE" AS) NVARCHAR(10)))AP_RQ_LOCAL_TXN_DATE,TRIM(CAST(" AP_RQ_RETAILER" AS) NVARCHAR(11)))AP_RQ_RETAILER,
我使用了这个命令
sed 's/\(^.*VARCHAR\(1000\).*$\)/--\1/I' *.sql
但结果并不像预期的那样。 有谁知道我做错了什么?
答案 0 :(得分:1)
这应该做:
sed 's/.*VARCHAR(1000).*/--&/' file
sed命令中的问题出在正则表达式部分。默认情况下,sed使用BRE,这意味着,( and )
(包裹1000
)只是字面括号,你应该不逃避它们,或者你赋予它们特殊含义:正则表达式分组。
您已转义的第一个和最后一个(..)
,如果您想稍后通过\1
引用它,那么您做得对。所以你的问题是逃避或不逃避。 :)
答案 1 :(得分:0)
使用以下sed命令:
sed '/VARCHAR(1000)/ s/.*/--\0/' *.sql
s
命令适用于包含VARCHAR(1000)
的所有行。然后,它将.*
整个行\0
替换为前面的--
。
答案 2 :(得分:0)
通过awk,
awk '/VARCHAR\(1000\)/ {sub (/^/,"--")}1' infile > outfile