1

以下のようなファイルでパターンを探しています。この例では、文字列を grep する必要がありますmgrpRFC822MailMember: foo.foo2@example.com

上記の文字列が一致する場合は、上に移動して最初のdn:行を見つけて出力します

test-d@example.com

さて、問題は、行dn:が常に同じ番号にあるとは限らないことです(以下の例では、行dn:はgrepさ​​れた行の3行上にありますmgrpRFC822MailMember: foo.foo2@example.com

これは常に正しいとは限りません。の前の任意の番号にすることができます。mgrpRFC822MailMember: foo.foo2@example.com

条件は次のとおりです。

  1. 文字列のgrep -mgrpRFC822MailMember: foo.foo2@example.com

  2. 一致する場合は、この行の上の最初の 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
awk '/dn: /{bar=$2} /MailMember:/{print bar}' FS='[=,]'
  • dn: ラインを探す
  • bar行を変数として保存
  • MailMember:ラインを探す
  • 印刷bar変数
于 2013-04-22T21:58:03.593 に答える
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 に答える