2013-04-22 154 views
1

我在尋找一個看起來像下面一個文件中的模式上述特定字線。在這個例子中,我需要到grep一個字符串mgrpRFC822MailMember: [email protected]grep的一個字符串,如果匹配查找與匹配線

如果上面的字符串相匹配,然後上去找到第一個dn:線和打印

[email protected] 

現在,問題是,該行dn:不總是在相同的數字中(在下面的示例中,線路dn:比grep'ed線路mgrpRFC822MailMember: [email protected]高出3行)

這並非總是如此。它可以在任何數量的前mgrpRFC822MailMember: [email protected]

這裏的條件:

  1. grep命令字符串 - mgrpRFC822MailMember: [email protected]

  2. 如果匹配,尋找第一DN:線這條線以上和只打印[email protected]

任何幫助,非常感謝。

time: 1364633264 
dn: [email protected],ou=MessageRecipientGroups,dc=example,dc=com 
changetype: modify 
delete: mgrpRFC822MailMember 
mgrpRFC822MailMember: [email protected] 
- 
replace: entryCSN 
entryCSN: 20130330084739Z#00000b#00#000000 
- 
replace: modifiersName 
modifiersName: uid=distlist-cleanup,ou=SysAccounts,dc=example,dc=com 
+4

我不要認爲這可以通過grep來合理完成,而是嘗試使用'awk'。當你看到一個'dn:'行保存一個變量的地址,並且當你看到'mgrpRFC822MailMember:foo.foo2 @ example.com'時,打印這個變量。 – Barmar 2013-04-22 20:44:08

回答

1
awk '/dn: /{bar=$2} /MailMember:/{print bar}' FS='[=,]' 
  • dn: 
  • 保存行bar變量
  • MailMember:
  • 打印bar變量
1

您還可以使用sed可能會更快。把下列文件,說x.sed,不添加任何空格或製表符

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

然後運行的sed這樣

sed -n -f x.sed filename 

對於您的例子,它打印出

[email protected] 
+0

非常好..謝謝Marichyasana – 2013-04-26 18:13:23