
次のファイルがあります。
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=948089,ou=Entities,ou=Active,ou=Vault<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=947458,ou=Entities,ou=Active,ou=Vault<br />
DelegatedAdmin: cn=9776c3f8-f2ee-4b6c-a9a9-32d87b45f7c5,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=10717,ou=Entities,ou=Active,ou=Vault<br />
DelegatedAdmin: cn=e0a838f0-3d53-42e8-8dad-bd1d774381de,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=1500,ou=Entities,ou=Active,ou=Vault<br />
次に変更する必要があります(1行と4行を交換)。
dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
dn: cn=948089,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
dn: cn=947458,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
dn: cn=10717,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=9776c3f8-f2ee-4b6c-a9a9-32d87b45f7c5,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
dn: cn=1500,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=e0a838f0-3d53-42e8-8dad-bd1d774381de,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
どうすればいいですか?
答え1
また試み
awk '{print $4, $2, $3, $1}' RS= FS="\n" OFS="\n" ORS="\n\n" file
dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
RS=<empty>
空行、行=フィールドなどのフィールド区切り文字で区切られた複数のレコード行を使用し、<NL>
必要な順序で印刷します。
答え2
ed
利用可能なさまざまな戦略を採用してください。米DelegatedAdmin:
下に3行、上に3行移動dn:
:
printf '%s\n' 'g/^DelegatedAdmin:/m+3' 'g/^dn:/m-3' 'w newfile' 'q' | ed -s file
'w newfile' 'q'
内部編集のためにプレーンテキストに変更します'wq'
。file
標準出力テスト:
$ printf '%s\n' 'g/^DelegatedAdmin:/m+3' 'g/^dn:/m-3' ',p' 'Q' | ed -s file
dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
dn: cn=948089,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
dn: cn=947458,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
dn: cn=10717,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=9776c3f8-f2ee-4b6c-a9a9-32d87b45f7c5,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
dn: cn=1500,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=e0a838f0-3d53-42e8-8dad-bd1d774381de,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
答え3
既存のスレッドでより良い答えを見つけることができます。
ファイルの行順の変更
本当に良い答えがあるようです。 「in-place」で行う必要がある場合は役に立たないかもしれませんが、以下を使用して次の解決策を推定しましたPerl
。
https://unix.stackexchange.com/a/368429/344329
スクリプトはファイル全体を処理し、各行($_に保存)ごとに次の2行($ l2と$ l3)を取得し、要求された順序(line1、line3、line2)で印刷します。
解決策は次のとおりです。
perl -ne '$l2=<>; $l3=<>; print $_,$l3,$l2;' input.txt
ユースケースに応じて、次のように試すことができます。
perl -ne '$l2=<>; $l3=<>; $l4=<>; $l5=<>; print $l4,$l2,$l3,$_,$l5; if(eof) { exit; } ' input.txt >> output.txt
正直なところ、私は専門家ではないので、これが最善のアプローチであるかどうかはわかりません。
答え4
そしてsed
:
sed '/^Delegate/{N;N;N;s/\(.*\)\(\n.*\n.*\n\)\(.*\)/\3\2\1/;}'
または予約済みのスペースを活用してください。
sed -ne '/^Delegate/{h;n;N;G;x;n;G;}' -e p