• Publicidad

Listar ficheros y cambiar string

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Listar ficheros y cambiar string

Notapor enric73 » 2016-05-13 14:35 @649

Hola.

Con el siguiente código quiero listar ficheros de un directorio y modificar el string d01 por d02 en todos aquellos ficheros que contengan este string... El código lista los ficheros pero no me guarda el cambio de string... ¿Qué debería añadir? Gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @files = glob("*.dat *.out");
  2. foreach my #file (@files) {
  3.     print "$file\n";
  4.     s/d01/d02/g;
  5. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Publicidad

Re: Listar ficheros y cambiar string

Notapor explorer » 2016-05-13 15:56 @705

Te falta abrir cada archivo, en lectura, y otro, el destino, en escritura. Y luego hacer un bucle por todas las filas, hacer la operación de sustitución, y cerrar los archivos. Así por cada archivo.

Ahora bien... se puede hacer todo desde la línea de comandos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
perl -pi'.bak' -e 's/d01/d02/' *.dat *.out
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Más información sobre la opción '-i' en perldoc perlrun

Consejo: aunque los archivos originales quedan renombrados como '.bak', te aconsejo que antes hagas una copia de seguridad de los archivos originales, por si tienes que repetir la operación.

Al menos, las primeras veces, hasta que domines esta técnica. Una vez aprendida, es poderosísima.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Listar ficheros y cambiar string

Notapor enric73 » 2016-05-18 14:19 @638

explorer, al final lo he solucionado de esta manera, con el siguiente código

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @files = glob("*.grb *.out");
  2. foreach my $file (@files) {
  3.     (my $newName = $file) =~ s/d01/d02/g;
  4.     rename $file, $newName;
  5. }
  6.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Listar ficheros y cambiar string

Notapor explorer » 2016-05-18 15:03 @669

¡Ah! Pero es que nos has engañado :?

Hemos creído que se trataba de cambiar el contenido de los archivos, no el nombre de los archivos :P

La '/g' te sobra si estás seguro que 'd01' solo aparece una vez por cada nombre de archivo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 6 invitados