
.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
答え2
キーラインも1本の長いラインで収集する必要があるとします。
sed '
:a
N
/\n-\|-\n/{
P
D
}
s/\n/ /
ta
' file
答え3
ここに別のものがありますsed
:
sed '/^---/,/---$/{H;/^---/h;/---$/!d;x;s/\n/ /g;}' infile
これは範囲と保持バッファを使用します。範囲の各行を保存バッファに追加し、範囲の先頭であれば上書きし、行が範囲の終わりでない場合は行を削除し、そうでない場合はバッファを置き換えてすべての改行を置き換えます。スペースがある。
他のアプローチもありますed
。
ed -s infile <<\IN
?^---?,.-s/$/ /
?^---?,$j
1,/---$/-s/$/ /
1,/---$/j
w
q
IN
これは4つの範囲を使用します。まずed
、ファイルの末尾から始めて後方に検索し、最初の範囲の各行の末尾にスペースを追加してから、2番目の範囲(実際には最初の範囲に1を加えた値)の行を連結します。より多くの行);その後、同じことを行いますが、ファイルの先頭から始まります。
答え4
コメントで要求されたPosixバージョン:
#!/bin/sh
jump=1
while IFS= read -r lin; do
case $lin in
----*)
jump=0
;;
*----)
jump=1
;;
esac
if [ "$jump" = "1" ]; then
printf '%s\n' "$lin"
else
printf '%s' "$lin "
fi
done <"$1"
呼ぶ:
./script file.txt >thedest.txt