2개의 디지털 인증서가 포함된 파일의 일부를 필터링하려고 합니다. 기본적으로 첫 번째 부분(Cert1이라고 가정)은 원하지만 두 번째 부분(Cert2)은 원하지 않습니다.
파일 내용은 다음과 같습니다.
-----BEGIN CERTIFICATE-----
AAAA
AAAA
ETC
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AAAA
AAAA
ETC
-----END CERTIFICATE-----
나는 이것이 나에게 Cert1의 내용을 제공할 것이라는 인상을 받았습니다.(첫 번째 BEGIN과 첫 번째 END 사이의 첫 번째 부분):
cat /etc/nginx/cert.pem | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
하지만 어떤 이유에서인지 두 번째 BEGIN과 두 번째 END 사이의 모든 내용이 계속 표시됩니다.(기본적으로 아무것도 바뀌지 않습니다. 모든 것이 동일합니다.).
어떤 충고?
답변1
거의 다 왔습니다:
sed -ne '
/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p # got the range, ok
/-END CERTIFICATE-/q # bailing out soon as the cert end seen
' /etc/nginx/cert.pem
그러나 인증서 시작 및 끝 태그 줄도 출력의 일부입니다.
답변2
이 작업을 수행하려면 다음 sed 명령을 사용할 수 있습니다.
sed '/-----END CERTIFICATE-----/q' /etc/nginx/cert.pem
q
sed에 종료를 지시하는 종료 코드입니다. 따라서 sed는 파일의 시작 부분부터 인쇄하고 "-----END CERTIFICATE----" 패턴을 만나면 종료됩니다. 이로 인해 첫 번째 인증서가 끝나면 중지됩니다.
cat의 출력을 sed로 파이프할 필요도 없습니다. sed 명령에 파일 이름을 지정하기만 하면 됩니다.
원천 -http://www.theunixschool.com/2011/09/sed-selective-printing.html