Linux grep表示字符串,如果匹配,则在匹配行上方查找具有特定单词的行
我在一个文件中寻找一个模式,如下所示。在本例中,我需要grep查找字符串Linux grep表示字符串,如果匹配,则在匹配行上方查找具有特定单词的行,linux,grep,Linux,Grep,我在一个文件中寻找一个模式,如下所示。在本例中,我需要grep查找字符串mgrpRFC822MailMember:foo。foo2@example.com 如果上面的字符串匹配,则向上查找第一行dn:并打印 test-d@example.com 现在,问题是,dn:行并不总是在同一个数字上(在下面的示例中,dn:行在grep'ed行mgrpRFC822MailMember:foo上方3行)。foo2@example.com) 这并不总是正确的。它可以位于mgrpRFC822MailMember
mgrpRFC822MailMember:foo。foo2@example.com
如果上面的字符串匹配,则向上查找第一行dn:
并打印
test-d@example.com
现在,问题是,dn:
行并不总是在同一个数字上(在下面的示例中,dn:
行在grep'ed行mgrpRFC822MailMember:foo上方3行)。foo2@example.com
)
这并不总是正确的。它可以位于mgrpRFC822MailMember:foo之前的任何数字上。foo2@example.com
条件如下:
mgrpRFC822MailMember:foo。foo2@example.com
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
- 查找
行邮件成员:
- 打印
变量bar
x.sed
,不要添加任何空格或制表符
/dn:/h
/MailMember:/{
g
s/.*RoutingAddress.//
s/,.*//p
}
然后像这样跑
sed -n -f x.sed filename
例如,它会打印出来
test-d@example.com
我认为使用grep无法合理地做到这一点,请尝试使用
awk
。当您看到dn:
行时,请将地址保存在变量中,当您看到mgrpRFC822MailMember:foo时。foo2@example.com
打印变量。非常好。。谢谢Marichyasana