寻找大文本中{{'和':'之间的单一事件

时间:2017-05-04 10:55:34

标签: regex

我是Regex世界的新手,所以请发脾气:-)

我想只打印{:之间第一次出现的字符串。

以下字符串中的示例:

  

({TRIGGER.VALUE} = 0和{Zabbix windows:zabbix [process,discoverer,avg,busy] .avg(10m)}> 75)

     

     

({TRIGGER.VALUE} = 1和{Zabbix windows:zabbix [process,discoverer,avg,busy] .avg(10m)}> 65)

我希望它只输出Zabbix windows

怎么可能?

我尝试{([a-zA-Z0-9 ]*):正在打印:并执行两次。

感谢阅读! 作者Srini

1 个答案:

答案 0 :(得分:2)

您可以使用带有-o选项的PCRE正则表达式(提取匹配而不是返回整行)来获取所需的文本,并使用head -1仅匹配第一个匹配项:

s='({TRIGGER.VALUE}=0 and {Zabbix windows:zabbix[process,discoverer,avg,busy].avg(10m)}>75) or ({TRIGGER.VALUE}=1 and {Zabbix windows:zabbix[process,discoverer,avg,busy].avg(10m)}>65)'
echo $s | grep -oP '(?<={)[\w\s]+(?=:)' | head -1

查看online demo

模式详情

  • (?<={) - 当前位置左侧必须有{
  • [\w\s]+ - 1+字和/或空白字符
  • (?=:) - 当前位置右侧必须有: