我是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
答案 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
模式详情:
(?<={)
- 当前位置左侧必须有{
[\w\s]+
- 1+字和/或空白字符(?=:)
- 当前位置右侧必须有:
。