パターンを検索し、常にcnを含む最初の行を印刷します。

パターンを検索し、常にcnを含む最初の行を印刷します。

次の出力を含むファイルがあります。

dn: rdcPosition がある場合があります。

acme#6# を含む rdcPositions を持つ dn: のみが必要です。

結果はcnとrdcPositionを印刷する必要があります。

dn: cn=00fa69bd-bede-4918-a017-b59b0901bb3d,ou=Named,ou=Identities,ou=Active,o
 u=Vault,o=acme
rdcPosition: cn=1950,ou=Entities,ou=Active,ou=Vault,o=acme#6#<position><cn>8946
 702990</cn><reqdate>1529318977</reqdate><startdate>1529318977</startdate><end
 date>1924902000</enddate><lifecycle><change><previousstatus/><newstatus>1</ne
 wstatus><date>1529318977</date></change><change><date>1529319116</date><previ
 ousstatus>1</previousstatus><newstatus>3</newstatus></change><change><date>15
 29481285</date><previousstatus>3</previousstatus><newstatus>6</newstatus></ch
 ange></lifecycle></position>

dn: cn=010903cd-e92d-4307-bffc-4921379153c0,ou=Named,ou=Identities,ou=Active,o
 u=Vault,o=acme
rdcPosition: cn=922445,ou=Entities,ou=Active,ou=Vault,o=acme#5#<position><cn>42
 79084890</cn><reqdate>1429014997</reqdate><startdate>1429014997</startdate><e
 nddate>1924902000</enddate><lifecycle><change><previousstatus/><newstatus>1</
 newstatus><date>1429014997</date></change><change><date>1429023084</date><pre
 viousstatus>1</previousstatus><newstatus>3</newstatus></change><change><date>
 1525107741</date><previousstatus>3</previousstatus><newstatus>6</newstatus></
 change><change><date>1525126716</date><previousstatus>6</previousstatus><news
 tatus>5</newstatus></change></lifecycle></position>
rdcPosition: cn=311982,ou=Entities,ou=Active,ou=Vault,o=acme#6#<position><cn>97
 26910833</cn><reqdate>1528120494</reqdate><startdate>1528120494</startdate><e
 nddate>1924902000</enddate><lifecycle><change><previousstatus/><newstatus>1</
 newstatus><date>1528120494</date></change><change><date>1528123478</date><pre
 viousstatus>1</previousstatus><newstatus>3</newstatus></change></lifecycle></
 position>

dn: cn=01126aa4-af80-401b-8713-29e360868999,ou=Named,ou=Identities,ou=Active,o
 u=Vault,o=acme
rdcPosition: cn=914570,ou=Entities,ou=Active,ou=Vault,o=acme#6#<position><cn>20
 68839799</cn><reqdate>1406284665</reqdate><startdate>1406284665</startdate><e
 nddate>1924902000</enddate><lifecycle><change><previousstatus/><newstatus>0</
 newstatus><date>1406284665</date></change><change><date>1406284666</date><pre
 viousstatus>1</previousstatus><newstatus>3</newstatus></change><change><date>
 1435847283</date><previousstatus>3</previousstatus><newstatus>6</newstatus></
 change></lifecycle></position>
rdcPosition: cn=999546,ou=Entities,ou=Active,ou=Vault,o=acme#6#<position><cn>76
 03071057</cn><reqdate>1400325753</reqdate><startdate>1400325753</startdate><e
 nddate>1924902000</enddate><lifecycle><change><previousstatus/><newstatus>0</
 newstatus><date>1400325753</date></change><change><date>1400325754</date><pre
 viousstatus>1</previousstatus><newstatus>3</newstatus></change><change><date>
 1449224475</date><previousstatus>3</previousstatus><newstatus>6</newstatus></
 change></lifecycle></position>
rdcPosition: cn=3513,ou=Entities,ou=Active,ou=Vault,o=acme#6#<position><cn>2802
 042129</cn><reqdate>1406284761</reqdate><startdate>1406284761</startdate><end
 date>1924902000</enddate><lifecycle><change><previousstatus/><newstatus>0</ne
 wstatus><date>1406284761</date></change><change><date>1406284762</date><previ
 ousstatus>1</previousstatus><newstatus>3</newstatus></change><change><date>14
 49224599</date><previousstatus>3</previousstatus><newstatus>6</newstatus></ch
 ange></lifecycle></position>
rdcPosition: cn=312936,ou=Entities,ou=Active,ou=Vault,o=acme#3#<position><cn>19
 23461515</cn><reqdate>1449217172</reqdate><startdate>1449217172</startdate><e
 nddate>1924902000</enddate><lifecycle><change><previousstatus/><newstatus>1</
 newstatus><date>1449217172</date></change><change><date>1449225081</date><pre
 viousstatus>1</previousstatus><newstatus>3</newstatus></change></lifecycle></
 position>

ベストアンサー1

入力は、次のようにLDIFとして表示されます。RFC 2849

私は強くお勧めしますいいえLDIF 処理に一般的に使用される awk/sed/grep ツールチェーンを使用する理由は次のとおりです。

  • 長い属性値行(dn:を含む)は、行の連続を示すために単一のスペースで囲まれています。
  • 非ASCII文字を含む属性値はbase64でエンコードされます。

最善の解決策は、好みのスクリプト言語に適したLDIFパーサーを使用することです。

ldifたとえば、Pythonの場合は、python-ldapのモジュールを使用します。

ドキュメントを参照してください。ldif – LDIFパーサーとジェネレータ

おすすめ記事