¿Recortar una parte si es igual a otra parte?

¿Recortar una parte si es igual a otra parte?

Utilizo una cadena de atribución de cotización por correo electrónico como esta:

On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):

donde [email protected]está la dirección de correo electrónico del remitente y Example Dot Orges el nombre real del remitente.

Cuando no se proporciona ningún nombre real (o incluso a veces cuando se proporciona uno), los dos son idénticos y termino con una cadena de atribución como esta:

On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):

Si (y sólo si) este es el caso, quiero eliminar la pieza, dejándome solo con:([email protected])

On dd mmm yyyy hh:mm +hhmm, from [email protected]:

Ya tengo un script de shell que llama a Perl para que revise el correo electrónico antes de enviarlo a mi editor, y estoy pensando que podría simplemente agregarle algo de código para revisar también la línea de atribución. La solución se podría hacer en Perl, awk, sed o cualquier otra cosa (aunque preferiblemente no en algotambiénexótico).

Sé que la línea de atribución es la primera línea que no está en blanco después de la primera línea en blanco de la entrada, y no me importa codificarla con mi formato de línea de atribución preferido. Simplemente eliminar la parte entre paréntesis es trivial, pero¿Cómo hacerlo sólo cuando es igual a lo que le precede?Preferiblemente sin correr el riesgo de alterar nada más en el correo electrónico (archivo de texto).

Respuesta1

Simplemente sustituya la subcadena que contiene las dos apariciones de la dirección con la primera mitad de la subcadena, que contiene solo una dirección:

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]:

Respuesta2

perl -lane 'print "($F[07]):" eq "$F[8]" ? "@F[0..7]:" : "@F"'

Esta línea de Perl dividirá la cadena en espacios, por lo que la siguiente cadena se dividirá en 9 partes:

On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):

Comparará la parte 8 (dirección de correo electrónico) con la parte 9 (nombre del remitente) y, si son iguales, se eliminará la parte 8. dejándote con:

On dd mmm yyyy hh:mm +hhmm, from [email protected]:

información relacionada