.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
한 가지 방법은 다음과 같습니다 sed
.
sed -e '/^---/ {
:1
$!N
s/\n/ /
/---$/!b1
}' <file
이 접근 방식은 작업을 직접 수행합니다.
- 줄이 로 시작하는 경우
---
코드 블록을 입력하세요. - 코드 블록 내에서 다음과 같은 루프 태그를 만듭니다.
1
- 현재 라인이 마지막 라인이 아니면
N
입력의 분기 라인을 읽습니다.$
\n
개행 문자를 공백으로 바꾸기- 다음 줄이 끝나면 루프를
---
중단하고!
, 그렇지 않으면 루프를 다시 시작합니다.b1
답변2
키 라인도 하나의 긴 라인으로 수집되어야 한다고 가정합니다.
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
이것은 네 가지 범위를 사용합니다. 먼저 ed
파일 끝에서 시작하여 뒤로 검색하고 첫 번째 범위의 각 줄 끝에 공백을 추가한 다음 두 번째 범위(실제로 첫 번째 범위에 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