如何使用sed或awk删除此模式?

如何使用sed或awk删除此模式?,awk,sed,Awk,Sed,我有这种模式,并试图找到一种使用sed或awk删除某个id的方法。 我使用函数参数$1传递ID。我在堆栈上查找了它,但找不到适合我的解决方案 sed-i“/gen\(/{:a;N;/\)/!ba};/$1/d”文件 在编辑此sed命令的某个点上,它确实删除了一行,但只删除了ID所在的行 这是我一直在使用的一个,我做了一些小的改变,但到目前为止没有任何效果。我也应该删除顶部的hashtag,但首先,我主要是尝试删除gen模式。如果一个单独的)总是终止一条记录,这在Awk中就足够容易了 awk-vr

我有这种模式,并试图找到一种使用sed或awk删除某个id的方法。 我使用函数参数$1传递ID。我在堆栈上查找了它,但找不到适合我的解决方案

sed-i“/gen\(/{:a;N;/\)/!ba};/$1/d”文件

在编辑此sed命令的某个点上,它确实删除了一行,但只删除了ID所在的行

这是我一直在使用的一个,我做了一些小的改变,但到目前为止没有任何效果。我也应该删除顶部的hashtag,但首先,我主要是尝试删除gen模式。

如果一个单独的
总是终止一条记录,这在Awk中就足够容易了

awk-vrs=')'-vrs=')'/id+112/'文件

你就快到了。当您引用
时(将
\
放在字符前面),您将它们的含义改为一组,而不是一个字面的
。也许函数
f(){sed-i'/^gen(/{:a;N;/^)/M!ba;/'$1'/d'${2:-file}”;}
可以满足您的要求(如果您使用bash)?它是bash。我遇到了一个错误,括号被指示为原因,所以我认为可能必须对其进行转义。用单引号括住sed命令更安全(如我第一次评论中所述)然后bash插值的副作用就不会发生了。非常感谢,我确实注意到我可以用右括号做一些事情,但我对sed真的没有经验,甚至对awk更没有经验。但我确实注意到,真正学习它是非常值得的。再次感谢。在Mac上测试,哪个平台你在使用orm吗?我使用的是red hat Linux实际上刚刚注意到它在文件末尾留下了一个parentehese*,带有已编辑的解决方案,无论我在何处删除,中间开头或结尾,结尾都有额外的括号。
#======================================================================
#NAME
#======================================================================
gen (
         id  111
         descr  Test 1
         txcd  
                content           
)
#======================================================================
#NAME
#======================================================================
gen (
         id  112
         descr  Test 2
         txcd
                content
)
#======================================================================
#NAME
#======================================================================
gen (
         id  123
         descr  Test 3
         txcd
                content
)