如何使用sed或awk删除此模式?
我有这种模式,并试图找到一种使用sed或awk删除某个id的方法。 我使用函数参数$1传递ID。我在堆栈上查找了它,但找不到适合我的解决方案如何使用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-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
)