1

我正在寻找如下所示的文件中的模式。在这个例子中,我需要 grep 来获取一个字符串mgrpRFC822MailMember: foo.foo2@example.com

如果上面的字符串匹配然后上去找到第一dn:行并打印

test-d@example.com

现在,问题是,该行dn:并不总是相同的数字(在下面的示例中dn:,该行在 grep'ed 行上方 3 行mgrpRFC822MailMember: foo.foo2@example.com

这并不总是正确的。它可以在任何数字之前mgrpRFC822MailMember: foo.foo2@example.com

这是条件:

  1. 字符串的 grep -mgrpRFC822MailMember: foo.foo2@example.com

  2. 如果匹配,则查找该行上方的 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
4

2 回答 2

1

您也可以使用 sed,它可能会更快。将以下内容放入文件中,例如x.sed,不要添加任何空格或制表符

/dn:/h
/MailMember:/{
g
s/.*RoutingAddress.//
s/,.*//p
}

然后像这样运行 sed

sed -n -f x.sed filename

对于您的示例,它会打印出来

test-d@example.com
于 2013-04-23T00:09:05.010 回答
1
awk '/dn: /{bar=$2} /MailMember:/{print bar}' FS='[=,]'
  • dn: 线
  • 将行另存为bar变量
  • MailMember:线
  • 打印bar变量
于 2013-04-22T21:58:03.593 回答