Página 1 de 1

Listar ficheros y cambiar string

NotaPublicado: 2016-05-13 14:35 @649
por enric73
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

Re: Listar ficheros y cambiar string

NotaPublicado: 2016-05-13 15:56 @705
por explorer
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.

Re: Listar ficheros y cambiar string

NotaPublicado: 2016-05-18 14:19 @638
por enric73
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

Re: Listar ficheros y cambiar string

NotaPublicado: 2016-05-18 15:03 @669
por explorer
¡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.