Eu uso uma string de atribuição de cotação por e-mail como esta:
On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):
onde [email protected]
está o endereço de e-mail do remetente e Example Dot Org
é o nome real do remetente.
Quando nenhum nome real é fornecido (ou mesmo às vezes quando um é), os dois são idênticos e acabo com uma string de atribuição como esta:
On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):
Se (e somente se) for esse o caso, quero remover a peça, deixando-me apenas:([email protected])
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
Eu já tenho um script de shell que chama Perl para massagear o e-mail antes de enviá-lo ao meu editor, e estou pensando em simplesmente adicionar algum código a ele para massagear a linha de atribuição também. A solução poderia ser feita em Perl, awk, sed ou qualquer outra coisa (embora de preferência não algotambémexótico).
Eu sei que a linha de atribuição é a primeira linha que não está em branco após a primeira linha em branco da entrada e não me importo de codificar meu formato de linha de atribuição preferido. Simplesmente deletar a parte entre parênteses é trivial, mascomo fazê-lo somente quando for igual ao que o precede?De preferência sem correr o risco de alterar mais nada no email (arquivo de texto).
Responder1
Basta substituir a substring que contém as duas ocorrências do endereço pela primeira metade da substring, contendo apenas um endereço:
bash-4.2$ echo '
On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):
On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
' | sed -r 's/(, from (\S+)) \(\2\)/\1/'
On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
Responder2
perl -lane 'print "($F[07]):" eq "$F[8]" ? "@F[0..7]:" : "@F"'
Este liner Perl dividirá a string em espaços, então a string a seguir será dividida em 9 partes:
On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):
Ele irá comparar part8 (endereço de e-mail) com part9 (nome do remetente) e se forem iguais, part8 será removido. deixando você com:
On dd mmm yyyy hh:mm +hhmm, from [email protected]: