
Estoy intentando filtrar una parte de un archivo que contiene 2 certificados digitales. Básicamente, quiero la primera parte (digamos Cert1) y no la segunda parte (Cert2).
El contenido del archivo es:
-----BEGIN CERTIFICATE-----
AAAA
AAAA
ETC
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AAAA
AAAA
ETC
-----END CERTIFICATE-----
Tenía la impresión de que esto me daría el contenido de Cert1(la primera parte entre el primer COMIENZO y el primer FINAL):
cat /etc/nginx/cert.pem | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
Sin embargo, por alguna razón, todavía me presenta todo el contenido entre el segundo COMIENZO y el segundo FINAL.(básicamente, nada cambia; todo el contenido es el mismo).
¿Algún consejo?
Respuesta1
Ya casi estabas ahí:
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
Pero tenga en cuenta que las líneas de marcador de inicio y fin del certificado también son parte del resultado.
Respuesta2
Puede utilizar el siguiente comando sed para esta tarea
sed '/-----END CERTIFICATE-----/q' /etc/nginx/cert.pem
q
es un código de salida que indica a sed que salga. Por lo tanto, sed imprimirá desde el principio del archivo y se cerrará cuando se encuentre el patrón '-----END CERTIFICATE-----'. Esto hace que se detenga al final del primer certificado.
Además, no es necesario utilizar una tubería para redirigir la salida de cat a sed. Simplemente especifique el nombre del archivo en el comando sed.
Fuente -http://www.theunixschool.com/2011/09/sed-selective-printing.html