
Estou tentando filtrar uma parte de um arquivo que contém 2 certificados digitais. Basicamente, 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 do 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 alguma razão, porém, ainda me apresenta todo o conteúdo entre o segundo BEGIN e o segundo END(basicamente, nada muda; todo o conteúdo é o mesmo).
Alguma indicação?
Responder1
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 do marcador inicial e final do certificado também fazem parte da saída.
Responder2
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 será impresso desde o início do arquivo e encerrado quando o padrão '-----END CERTIFICATE-----' for encontrado. Isso faz com que ele pare no final do primeiro certificado.
Além disso, não há necessidade de usar um pipe para redirecionar a saída de cat para sed. Basta especificar o nome do arquivo no comando sed.
Fonte -http://www.theunixschool.com/2011/09/sed-selective-printing.html