包含带sed括号的匹配模式 [英] Matching pattern containing parentheses with sed

查看:106
本文介绍了包含带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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆