• Publicidad

Buscar y remplazar texto en un archivo de texto plano

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

Buscar y remplazar texto en un archivo de texto plano

Notapor cmp » 2007-05-28 10:49 @492

Hola a todos.
Me gustaría saber, si sería muy complicado hacer un script en Perl que dada una palabra o trozo de texto, lo buscase en el contenido de un archivo de texto y lo reemplazara por otra palabra dada.

Si sabéis donde puedo encontrar información para hacerlo os lo agradecería.

Saludos.
cmp
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2007-05-28 10:43 @488

Publicidad

Notapor explorer » 2007-05-28 11:41 @528

Pues no... no es complicado...

De hecho, eso es una operación tan normal en Perl que se puede hacer sin escribir ningún programa: desde la misma línea de comandos, con los pies.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
perl -p -i -e 's/esto-es-lo-que-busco/esto-es-lo-que-pongo/g;' fichero.txt
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El funcionamiento se basa en usar opciones en Perl:
* -p: crea un bucle por todas las líneas del fichero.txt e imprime la línea al final. Es como si hiciéramos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while ( <> ) {   # Leer la línea del fichero de entrada y guardarla en $_
    # ... resto del programa ... podemos modificar $_, por ejemplo
    print;   # Imprime la línea almacenada en $_
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

* -i: las modificaciones que hagamos en las líneas del fichero se almacenan en el propio fichero
* -e: ejecutar el miniprograma que viene a continuación:
* s/// : es el operador de sustitución. Busca algo y lo sustituye por otro. Eso lo repite (/g) a lo largo de toda la línea, que por defecto será la que se encuentre en $_

Y nada más.

Más información en perlrun.

Un ejemplo con el módulo Sysadm::Install, aquí.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor cmp » 2007-05-28 11:55 @538

Muchisimas gracias explorer.
Como ves, soy novato, novato, pero quiero aprender poco a poco. El problema es que se me exige (como en ese caso) hacer cosas que me pierdo.
Gracias de nuevo.
cmp
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2007-05-28 10:43 @488

Notapor explorer » 2007-05-28 12:29 @561

Bienvenido a los foros de Perl en Español... y si estás empezando, quizás incluso sea más fácil no mirar el tema del perlrun, sino intentar hacer un programa pequeño que abra el fichero, lo lea línea a línea, que haga la sustitución y el resultado lo deja en otro fichero. Por ejemplo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor cmp » 2007-05-29 06:17 @304

Gracias por la bienvenida.
Me ha sido de gran utilidad tu respuesta, ahora solo tengo una pequeña duda:
Si el texto de reemplazo (esto-es-lo-que-pongo) contiene un carácter especial, como en mi caso la arroba (@), éste (y lo que viene detrás) no se ve reflejado en la modificación del fichero. Supongo que tiene que ver con que la @ se utiliza para definir arrays.
¿Qué debo hacer para que me coja la @?

Gracias y saludos.

P.D: En teoría el manual pone (refiriéndose a cadenas de caracteres): se puede definir el contenido entre comillas simples, no interpretándose ningún carácter especial contenido entre ellas.

Pero no funciona...
cmp
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2007-05-28 10:43 @488

Notapor explorer » 2007-05-29 08:17 @387

Prueba a 'escapar' el significado de la '@', con un '\' delante: '\@'.

A mí sí que me funciona escaparlo con comilla simple en la expresión regular:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!perl -l

$x = '[email protected]';

$x =~ s'@' at 'g;

print $x;

__OUTPUT__
email at host.com
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
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: Google [Bot] y 0 invitados

cron