Trasferencia de Control Condicional

La sintaxis de la orden t es:
[address1][,address2]t[label]
Si la sustitución tiene éxito, se bifurca a label, Si la etiqueta no se especifica, se salta al final del script.
Consideremos el siguiente fichero de entrada:
$ cat t.test
name: "fulano de tal" address: "Leganitos,4" phone: "342255"
name: "fulano de cual"
name: "fulano de alli" address: "Legitos,4"
name: "zutano de tal"  address: "Leg,8"  phone: "342255"
Se asume que siempre que figura el teléfono se ha puesto la dirección y que si está la dirección se ha escrito el nombre. Se pretenden rellenar las líneas con un campo por defecto:
$ cat t.sed
/name:/{
s/.*name:[ ]*".*"[ ]*address:[ ]*".*"[ ].*phone:[ ]*".*".*/&/
t
s/.*name:[ ]*".*"[ ]*address:[ ]*".*"/& phone: "????"/
t
s/.*name:[ ]*".*"/& address: "???? ????" phone: "????"/
}
Esta es la llamada al script y la salida generada:
$ sed -f t.sed t.test
name: "fulano de tal" address: "Leganitos,4" phone: "342255"
name: "fulano de cual" address: "???? ????" phone: "????"
name: "fulano de alli" address: "Legitos,4" phone: "????"
name: "zutano de tal"  address: "Leg,8"  phone: "342255"
$

Ejemplo:

El fichero de entrada es un folder de ...

01_NAME: XXX
02_SURNAME: XXX
03_TITLE: SISTEMAS
04_OtherTitle:
05_BIRTHDAY: XXX
06_BIRTHMONTH: XXX
07_BIRTHYEAR: XXX
08_ADDRESSFAMILY: XXX
09_ADDRESSACTUAL: XXX
10_POSTALCODE: XXX
11_EMAIL: XXX@csi.ull.es
12_TELEPHONE: XXX
13_FAX: XXX
14_LABGROUP: xxx
15_COMMENTS:
...

Se trata de escribir un script que produzca como salida los emails de los diferentes alumnos. Esta es una solución (suponemos que el script se llama con la opción

#!/bin/sed -f
/^11_EMAIL:/{
s/11_EMAIL: *\([a-zA-Z0-9]*@[a-zA-Z0-9.]*\)/\1/
t print
s/11_EMAIL: *\([a-zA-Z0-9]*\)/\1@csi.ull.es/
:print
p
}

Una característica no comentada y observada en algunos sed, incluyendo la versión Linux, es que, si existen varias sustituciones consecutivas antes de la sentencia de transferencia de control, basta con que una tenga éxito para que el salto se realice.

Casiano Rodríguez León
2013-04-23