Como imprimir o texto entre a primeira ocorrência de um par de cordas? [duplicado]

0

Estou tentando filtrar uma parte de um arquivo que contém dois certificados digitais. Basicamente, eu quero a primeira parte (digamos Cert1) e não a segunda parte (Cert2).

O conteúdo do arquivo é:

-----BEGIN CERTIFICATE-----
AAAA
AAAA
ETC
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AAAA
AAAA
ETC
-----END CERTIFICATE-----

Fiquei com a impressão de que isso me daria o conteúdo de Cert1 (a primeira parte entre o primeiro BEGIN e o primeiro END) :

cat /etc/nginx/cert.pem | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

Por algum motivo, no entanto, ele ainda me apresenta todo o conteúdo entre o segundo BEGIN e o segundo END (basicamente, nada muda; todo o conteúdo é o mesmo) .

Algum apontador?

    
por t988GF 29.04.2017 / 01:38

2 respostas

1

Você pode usar o seguinte comando sed para esta tarefa

sed '/-----END CERTIFICATE-----/q' /etc/nginx/cert.pem

q é um código de saída que instrui o sed a sair. Portanto sed irá imprimir a partir do início do arquivo e sair quando o padrão '----- END CERTIFICATE -----' for encontrado. Isso faz com que pare no final do primeiro certificado.

Além disso, não há necessidade de usar um pipe para redirecionar a saída do cat to sed. Simplesmente especifique o nome do arquivo no comando sed.

Fonte - link

    
por 29.04.2017 / 06:23
2

Você estava quase lá:

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

Mas observe que as linhas de marcação de início e fim do cert também fazem parte da saída.

    
por 29.04.2017 / 09:53