使用 sed 匹配包含括号的模式

Din*_*edi 3 regex bash sed

如果行包含单词 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,修剪( 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
Run Code Online (Sandbox Code Playgroud)

但结果并不如预期。有谁知道我做错了什么?

Ken*_*ent 6

这应该做:

sed 's/.*VARCHAR(1000).*/--&/' file
Run Code Online (Sandbox Code Playgroud)

sed 命令中的问题出在正则表达式部分。默认情况下 sed 使用 BRE,这意味着( and )(包裹1000) 只是文字括号,您不应该转义它们,或者您给了它们特殊的含义:正则表达式分组。

(..)你逃脱的第一个也是最后一个,你做对了,如果你想稍后通过 引用它\1。所以你的问题是逃还是不逃。:)