¿Cómo imprimir el texto entre la primera aparición de un par de cadenas?

¿Cómo imprimir el texto entre la primera aparición de un par de cadenas?

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

qes 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

información relacionada