仅使用gawk正则表达式删除2图案之间的字符串

时间:2018-06-14 12:28:46

标签: regex awk

输入:

secNm:ATA,_class:com.dddao.domaffin.summaggrfy.GddenericMohsg},{ttlRec:0,ttlVal:{:0}secNm:B2B,_class:com.xyz.dakjdain.sfffummary.GenericMo73hs}extra

secNm:ATA,_class:com.dddao.domaffin.summaggrfy.GddenericMohsg},{ttlRec:0,ttlVal:{:0} secNm:B2B,_class:com.xyz.dakjdain.sfffummary.GenericMo73hs

在上面我要删除的字符串, 对于字符串1:来自",_ class"并在第一次出现时结束"}" 对于字符串2:来自",_ class"如果第一个条件失败,直到结束。

输出:

secNm:ATA,{ttlRec:0,ttlVal:{:0}secNm:B2Bextra secNm:ATA,{ttlRec:0,ttlVal:{:0}secNm:B2B

此类型的模式在上面的字符串中存在不可确定的时间。 我想要简单的想要删除那些部分。

我写过正则表达式函数gsub(/,_class(.*?)\}/,"",$0)

我只想使用gawk正则表达式函数只回答其他方法。 我上面给出的函数有一些问题并删除了大部分字符串。 请帮我纠正我的正则表达式。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用[^}]否定括号表达式来匹配除}之外的任何字符,因为不支持延迟量词。

此外,你甚至不需要这里的分组构造,因为你没有在这里引用捕获的值。您可以安全删除()

使用

/,_class[^}]*}/

基本上,这应理解为:

  • ,_class - 匹配,_class substring
  • [^}]* - 除}
  • 以外的0个或更多字符
  • } - 包括}