包含带sed括号的匹配模式 [英] Matching pattern containing parentheses with sed
问题描述
如果行包含单词VARCHAR(1000),我需要在行的开头插入'-'
I need to insert '--' at the beginning of the line if line contains word 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,修剪(CAST("AP_RQ_LOCAL_TXN_DATE" ASNVARCHAR(10)))AP_RQ_LOCAL_TXN_DATE,TRIM(CAST("AP_RQ_RETAILER" ASNVARCHAR(11)))AP_RQ_RETAILER,
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
但是结果不符合预期.有人知道我在做什么错吗?
But the result is not as expected. Does anyone have idea what am I doing wrong?
推荐答案
这应该做到:
sed 's/.*VARCHAR(1000).*/--&/' file
sed命令中的问题出在正则表达式部分.默认情况下,sed使用BRE,这意味着(和)
(包装 1000
)只是文字括号,您应该不转义它们,或者您赋予了它们特殊的含义:正则表达式分组.
The problem in your sed command is at the regex part. By default sed uses BRE, which means, the ( and )
(wrapping the 1000
) are just literal brackets, you should not escape them, or you gave them special meaning: regex grouping.
您逃脱的第一个和最后一个(..)
,如果您以后想通过 \ 1
引用它,那您做对了.所以你的问题是逃脱还是无法逃脱.:)
The first and last (..)
you have escaped, there you did right, if you want to reference it later by \1
. so your problem is escape or not escape. :)
这篇关于包含带sed括号的匹配模式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!