2개의 인증서가 포함된 인증서 파일이 있습니다. 로 시작 ---BEGIN CERTIFICATE--
하고 로 끝납니다 ---END CERTIFICATE----
.
예:
---BEGIN CERTIFICATE--
blah1 blah1
---END CERTIFICATE----
---BEGIN CERTIFICATE--
blah2 blah2
---END CERTIFICATE----
두 번째 그룹을 다른 파일로 복사하고 싶습니다.
다음 명령을 시도했지만 sed
인증서가 public.cer
.
sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/w public.cer' intermediate.cer
두 번째 인증서만 새 파일에 복사하려면 어떻게 해야 합니까?
답변1
그리고awk
범위 모드:
awk '/BEGIN CERTIFICATE/ && ++c==2,/END CERTIFICATE/' intermediate.cer > public.cer
문서 내용 public.cer
:
---BEGIN CERTIFICATE--
blah2 blah2
---END CERTIFICATE----
ㅏ범위 모드형식으로 쉼표로 구분된 두 개의 패턴으로 구성됩니다 begpat, endpat
. 연속된 입력 레코드의 범위를 일치시키는 데 사용됩니다. 첫 번째 패턴은 begpat
범위의 시작 위치를 제어하는 동시에 endpat
패턴의 끝 위치도 제어합니다. 카운터는 c
일치하는 각 줄에서 증가하고 확인됩니다 /BEGIN_CERTIFICATE/
.
답변2
파일에 직접 쓰는 대신 예약된 공간에 있는 모든 인증서를 수집한 H
다음 마지막 줄에서 사용할 수 있습니다( $!d
마지막 줄을 제외한 모든 처리를 중지하므로 그 이후의 모든 작업은 마지막 줄에 대해서만 수행됩니다). 패턴 공간에 공간을 추가 g
하고 쓰기 전에 원하는 것을 삭제하십시오.
sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/H;$!d;g;s/.*\(---BEGIN\)/\1/;w public.cer'
답변3
blah2 이후에 END를 찾지 못하면 다른 sed를 사용하십시오.
sed ':A;$bB;/BEGIN CERTIFICATE/!d;N;/END CERTIFICATE/!bA;h;$!d;:B;x;w public.cer' intermediate.cer