例如,假设我们有以下一行:
RESULT: test=abc slave=def owners=own1,test,own2,newown time=32 status=fail
这里test、slave、owners、time和status是不同的属性。属性的数量可能会有所不同,即,可以存在像 category=xyz 这样的另一个属性,或者可能不存在某些属性。
我正在寻找一个匹配的正则表达式,如果“owners=”包含特定的所有者,比如“own2”。此外,此正则表达式不应与该行中的其他匹配项匹配。例如行可以是:
RESULT: test=own2 slave=def owners=own1,test,own2,newown time=32 status=fail
正则表达式不应匹配 own2 的“test”属性。
我花了几个小时搜索但失败了:(
我用 egrep 寻找正则表达式。我尝试了以下方法:
line="RESULT: test=abc slave=def owners=own1,test,own2,newown time=32 status=fail"
echo $line | egrep "owners=*own2*"
这未能返回任何值。我没有得到我的正则表达式有什么问题。
我正在寻找适用于所有 Unix 风格的东西,如 Linux、AIX、Solaris 等。
编辑 - 现在举例
非常感谢您的回复!
让我用更清晰的例子来解释:
我的文件内容:
blabla
blaaaaaa some text
RESULT: test=abcgrp1 slave=def owners=test,own2,newown time=32 status=fail
some more blabla
xyze
RESULT: test=abc1 slave=def owners=grp1,test time=32 status=pass
some text here
RESULT: test=abc2 slave=def owners=gr,grp1 time=32 status=pass
我想获得状态为“通过”且“所有者”为“grp1”或“grp2”的测试
所以,最初,我写道:
grep RESULT myfile | grep "pass" | egrep "grp1|gpr2"
很快就意识到这是不正确的,因为它对“myfile”中的第一个“RESULT”行返回 true。
所以,我想到了这样写:
grep RESULT myfile | grep "pass" | egrep "owners=grp1|owners=gpr2"
显然,这对于“myfile”中的第三个“RESULT”行将失败。
因此,我需要一个正则表达式,它仅在模式出现在“所有者”列表中的任何位置时才匹配。
注意:如果“所有者”列表有多个所有者,则以逗号分隔。否则,它只有一个值。例如:所有者=abc
希望我的问题现在更清楚了。