sed/awk 2 つのパターンマッチから改行文字を削除する

sed/awk 2 つのパターンマッチから改行文字を削除する

.pemファイルがあり、いくつかの形式を指定すると、次のようになります。

-----BEGIN
RSA
PRIVATE
KEY-----
MIIEogIBAAKCAQEAoK3D4mMIRnzPaYqHidgpBnDDzLlcYYd0GoB0pQGyGSHDW7KO3K+VeJP90GhE
ZTEWJLp2N5DR/KT+5Vg7cgdx/GCCrnlbW0McP/IvkYAuWCgbzoXH9eE+kDRtAmurBYCk7OTOwQ26
..........................LONG LONG LONG KEY................................
QRRLFsXua9spUh0yPd163IZStKZMhZBPJfMaqbi1WF+j21DdYyS0qpaZQRjFzRLvGuXeGLZG/COD
ip10XRJMMXY0m14bqOTcqKTya/5PTJIjDWC22+soIjLy0ZjWKo9n05Oal2t4q35kbos=
-----END
RSA
PRIVATE
KEY-----

私は明らかにこれが必要です:

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAoK3D4mMIRnzPaYqHidgpBnDDzLlcYYd0GoB0pQGyGSHDW7KO3K+VeJP90GhE
ZTEWJLp2N5DR/KT+5Vg7cgdx/GCCrnlbW0McP/IvkYAuWCgbzoXH9eE+kDRtAmurBYCk7OTOwQ26
..........................LONG LONG LONG KEY................................
QRRLFsXua9spUh0yPd163IZStKZMhZBPJfMaqbi1WF+j21DdYyS0qpaZQRjFzRLvGuXeGLZG/COD
ip10XRJMMXY0m14bqOTcqKTya/5PTJIjDWC22+soIjLy0ZjWKo9n05Oal2t4q35kbos=
-----END RSA PRIVATE KEY-----

awkまたはを使用してこれをどのように実行できますかsed

オンラインで見つけたすべてのチュートリアルは、aaaabbbaaaccccフルテキストまたは混乱したパターンで作業する方法を示しています。

私は次のことを試しました:

tr ' ' '\n' < test.pem  | awk '/BEGIN\nRSA\nPRIVATE\n$/ { printf("%s\t", $0); next } 1' > test-format.pem

しかし、それは失敗しました。

これが重要かどうかはわかりませんが、dockerコンテナ#!/bin/sh内のシェルスクリプトでこれを実行していますpython:3.5-alpine

どんな助けでも大変感謝します。

ベストアンサー1

1つの方法は次のとおりですsed

sed -e '/^---/ {
  :1
  $!N
  s/\n/ /
  /---$/!b1
}' <file

このアプローチは、タスクを直接実行します。

  • 行で始まる場合は、---コードブロックを入力してください。
  • コードブロック内に次のループタグを作成します。1
  • 現在の行が最後の行でない場合は、N入力の分岐線を読みます。$
  • \n改行文字をスペースに置き換える
  • 次の行が終わったらループを---中止し!、そうでなければループを再開します。b1

おすすめ記事