$ 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