sed 's/.*\"\(.*\)\".*//' filename
/etc/opendkim/keys/"$(hostname)"/default.txt
contém o seguinte
default._domainkey IN TXT "v=DKIM1; r=postmaster; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBZZZZZZZZZZZZZZZZZZZZZZZZYVW/965FePDPfxTIUT5ScJ3mZZZZZZZZ8BWNgLFS6JtZZZZZZZZZZZZZZk7Sc+eQwY6tHAQvHczJTTkICB4WW9mtc5PlFAZNuC9X3oYTeIp8cpScBmaIaP+t35fwh+PL7ZZZZZZZZZZ3ZxoFsJD6pvCqx+TCbZZZZZZZZ5JQIDAQAB" ; ----- DKIM default for mydomain.com
Eu quero copiar apenas as coisas dentro das aspas (sem incluí-las) v=DKIM1; r=postmaster; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBZZZZZZZZZZZZZZZZZZZZZZZZYVW/965FePDPfxTIUT5ScJ3mZZZZZZZZ8BWNgLFS6JtZZZZZZZZZZZZZZk7Sc+eQwY6tHAQvHczJTTkICB4WW9mtc5PlFAZNuC9X3oYTeIp8cpScBmaIaP+t35fwh+PL7ZZZZZZZZZZ3ZxoFsJD6pvCqx+TCbZZZZZZZZ5JQIDAQAB
em outro arquivo.
Como posso fazer isso?
Se definitivamente houver apenas uma string entre aspas por linha, sua solução mais eficaz envolverá cut
:
cut -d\" -f2 <in >out
Se houver mais de uma string entre aspas, você poderá fazer:
sed 's/[^"]*\("[^"]*"\)[^"]*/ /g' <in >out
..., que imprimirá apenas todas as cadeias de texto com aspas duplas por linha, cada uma separada com um espaço à esquerda e à direita.
Nenhuma das soluções acima é other-quote ciente, no entanto. Nenhum deles irá ignorar aspas com escape de barra invertida, ou aspas duplas contidas entre aspas duras, por exemplo.
Tags text-processing