두 번째 패턴 발생을 sed의 새 파일에 복사

두 번째 패턴 발생을 sed의 새 파일에 복사

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

관련 정보