Extraer las direcciones de correo electrónico de un fichero de texto en el que están mezcladas entre otras cadenas de texto

En MusicaLliure.cat estamos trabajando junto a una entidad sin ánimo de lucro en un proyecto. El coordinador de esta entidad me pidió si por favor podía ayudarle con un asunto.

Una de las personas participantes en esa entidad había recopilado una serie de direcciones de correo electrónico a las que había que mandar una nota de prensa (por supuesto, nada de envíos masivos e indiscriminados: direcciones públicas de las redacciones medios de comunicación y direcciones de periodistas que él conoce, porque esta entidad a la que me refiero tiene que ver con la comunicación, y había algunos periodistas con los que había hablado y habían quedado en que les mandaría la información sobre el proyecto por correo electrónico).

El problema era que había incluido las direcciones en un fichero de texto mezcladas con comentarios sobre a qué medio de comunicación pertenecía la dirección y cosas así. Y eso dificultaba poner las direcciones una tras otra en el campo “mandar con copia oculta” del gestor de correo electrónico.

Tras un rato investigando, me di por vencido. Expliqué hasta donde había llegado yo a un amigo, para que le sirviera a él de punto de partida, y felizmente encontró la solución. Me limito a traducir su explicación.

Paso el fichero inicial .doc a .txt (mediante openoffice.org)
Abro el .txt con el vim
:% s/;/r/gc
:% s/,/r/gc
:% s/)/r/gc
:% s/(/r/gc
:% s/</r/gc
:% s/>/r/gc
:w test1
Cierro vim
grep "@" test1 > test2
Abro test2 con vim
:% s/ //gc
:w output
:e! output
:%s/@//gn