簡體   English   中英

grep查找字符串,如果匹配,則在匹配的行上方查找具有特定單詞的行

[英]grep for a string and if matches look for a line with specific word above the matched line

我正在以下文件中尋找模式。 在此示例中,我需要grep輸入字符串mgrpRFC822MailMember: foo.foo2@example.com

如果上述字符串匹配,則向上查找第一個dn:行並打印

test-d@example.com

現在的問題是,行dn:並不總是相同的數字(在下面的示例中,行dn:在grep的行mgrpRFC822MailMember: foo.foo2@example.com上方3行mgrpRFC822MailMember: foo.foo2@example.com

這並非總是如此。 它可以是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
awk '/dn: /{bar=$2} /MailMember:/{print bar}' FS='[=,]'
  • 尋找dn:
  • 將線另存為bar變量
  • 尋找MailMember:
  • 打印bar變量

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

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

然后像這樣運行sed

sed -n -f x.sed filename

例如,它打印出來

test-d@example.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM