我正在寻找下面的文件中的模式。在这个例子中,我需要grep一个字符串mgrpRFC822MailMember: foo.foo2@example.com
如果上面的字符串匹配,则上升并找到第一个dn:
行并打印
test-d@example.com
现在问题是,行dn:
并不总是相同的数字(在下面的示例中,行dn:
比grep'ed行mgrpRFC822MailMember: foo.foo2@example.com
上方的3行)
这并非总是如此。它可以是mgrpRFC822MailMember: foo.foo2@example.com
以下是条件:
grep for the string - mgrpRFC822MailMember: foo.foo2@example.com
如果匹配,请在此行上方查找FIRST dn:行,仅打印test-d@example.com
非常感谢任何帮助。
time: 1364633264
dn: mailRoutingAddress=test-d@example.com,ou=MessageRecipientGroups,dc=example,dc=com
changetype: modify
delete: mgrpRFC822MailMember
mgrpRFC822MailMember: foo.foo2@example.com
-
replace: entryCSN
entryCSN: 20130330084739Z#00000b#00#000000
-
replace: modifiersName
modifiersName: uid=distlist-cleanup,ou=SysAccounts,dc=example,dc=com
答案 0 :(得分:1)
awk '/dn: /{bar=$2} /MailMember:/{print bar}' FS='[=,]'
dn:
行bar
变量MailMember:
行bar
变量答案 1 :(得分:1)
您也可以使用速度更快的sed。将以下内容放入文件中,例如x.sed
,不要添加任何空格或标签
/dn:/h
/MailMember:/{
g
s/.*RoutingAddress.//
s/,.*//p
}
然后像这样运行sed
sed -n -f x.sed filename
对于您的示例,它打印出来
test-d@example.com