Is it a fake website?

11 enero 2007

Expresiones regulares

Las expresiones regulares en la administracion de sistemas te salvan de muchas tareas pesadas.
Ahora me encuentro con una pequeña tarea a realizar;

Se tiene un fichero /etc/passwd

-------------------------------------------------------
servera:x:588:501::/usr/local/etc4/servera:/bin/bash
serverb:x:589:501::/usr/local/etc4/serverb:/bin/bash
-------------------------------------------------------

Por requerimientos de estructura, necesito que este fichero con cientos de registros como estos, tenga este nuevo formato

-------------------------------------------------------
servera:x:588:501::/usr/local/etc4/SERVERA:/bin/bash
serverb:x:589:501::/usr/local/etc4/SERVERB:/bin/bash
-------------------------------------------------------

Pasar a mayúsculas el campo en negrita, pero tener en cuenta que esa cadena está repetida dos veces por línea, con lo que no vale un simple tr/a-z/A-Z, hay que hacer algo más. ¿Cómo?

Nota: No es necesario modificar todas las entradas del fichero passwd, sólo unas especificadas a través de otro fichero externo.

El fichero externo tendrá:
-------
servera
serverb
serverc
...
-------

¿Cómo solucionarlo?

Solución 1.
--------------------------------
#!/usr/bin/perl
open (PASSWD, "passwd");
while (){
$str = $_;
chomp($line);
$str =~ s#(.*:.*/)(.*):(.*)$#$1\U$2\E:$3#;
print "$str";
}
close(PASSWD) || die "No se cerro SERVERS";
---------------------------------

No hay comentarios: