首页 文章

grep表示字符串,如果匹配则查找匹配行上方具有特定单词的行

提问于
浏览
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 之前的任何数字

这是条件:

  • grep为字符串 - 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

2 回答

  • 1

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

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

    然后像这样运行sed

    sed -n -f x.sed filename
    

    对于你的例子,它打印出来

    test-d@example.com
    
  • 1
    awk '/dn: /{bar=$2} /MailMember:/{print bar}' FS='[=,]'
    
    • 寻找 dn:

    • 将行保存为 bar 变量

    • 寻找 MailMember:

    • print bar 变量

相关问题