Martes 19 de Noviembre de 2024, 17:30
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
Perl
»
Re: Fich. Unix con Perl
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Re: Fich. Unix con Perl (Leído 2991 veces)
cedosd
Nuevo Miembro
Mensajes: 5
Re: Fich. Unix con Perl
«
en:
Martes 17 de Septiembre de 2002, 11:27 »
0
Buenos días, yo tengo un fichero en Unix y necesito encontrar una línea de ese fichero con un determinado texto, posicionarme una línea más abajo y a partir de ahí, escribir varias líneas. ¿Se puede hacer esto en Perl?. La verdad es que estoy bloqueado y agradeceria cualquier ayuda.
Gracias!!
Tweet
Avalon
Miembro MUY activo
Mensajes: 448
Re: Fich. Unix con Perl
«
Respuesta #1 en:
Jueves 19 de Septiembre de 2002, 14:03 »
0
Hola,
Podrías hacer algo como esto:
Código: Text
# abres el fichero
open(INPUT, "fichero.txt");
# guardas todo el contenido del fichero en una variable
@contenido = <INPUT>;
# cierras el fichero
close(INPUT);
# recorres los datos del fichero
foreach $linea (@contenido) {
chop($linea);
# se busca la línea que contiene el texto que nos interesa
if ($linea =~ /b$texto/i) {
push(@nuevosdatos, $linea . "n");
# Si se ha encontrado el texto, aquí añadirías las líneas que quieres insertar
push(@nuevosdatos, "Nueva linea 1n");
push(@nuevosdatos, "Nueva linea 2n");
push(@nuevosdatos, "Nueva linea 3n");
}
else {
# se deja la línea como estaba
push(@nuevosdatos, $linea . "n");
}
}
# Ahora vuelcas los nuevos datos en el fichero, borrando los datos que contenía anteriormente
open(OUTPUT, "+< fichero.txt");
foreach $linea (@nuevosdatos) {
print OUTPUT $linea;
}
close(OUTPUT);
Espero que te sirva.
Salu2,
Avalon
cedosd
Nuevo Miembro
Mensajes: 5
Re: Fich. Unix con Perl
«
Respuesta #2 en:
Viernes 20 de Septiembre de 2002, 12:43 »
0
Gracias, Avalon!!
El Lunes 23 te comento como ha ido el temilla.
cedosd
Nuevo Miembro
Mensajes: 5
Re: Fich. Unix con Perl
«
Respuesta #3 en:
Martes 24 de Septiembre de 2002, 09:19 »
0
Gracias Avalon, funciona perfectamente......¡Tu si que sabes!!.
Avalon
Miembro MUY activo
Mensajes: 448
Re: Fich. Unix con Perl
«
Respuesta #4 en:
Martes 24 de Septiembre de 2002, 21:35 »
0
No hay de que
Salu2,
Avalon
cedosd
Nuevo Miembro
Mensajes: 5
Re: Fich. Unix con Perl
«
Respuesta #5 en:
Jueves 3 de Octubre de 2002, 10:47 »
0
Hola de nuevo, Avalon!.
Necesito de nuevo tu ayuda. Al pasar el programa a CGI me da error en la linea:
@contenido = <INPUT>;
con el error:
Global symbol "@contenido" requires explicit package name at ./prueba.cgi line
22.
Yo no se si es que la he definido mal o que...¿sabeis que puede ser?
Gracias de nuevo.
Avalon
Miembro MUY activo
Mensajes: 448
Re: Fich. Unix con Perl
«
Respuesta #6 en:
Jueves 3 de Octubre de 2002, 11:11 »
0
Así a bote pronto lo único que se me ocurre es que estés utilizando la claúsula
use strict
en tu código, con lo cuál deberías declarar el array
@contenido
antes de poder utilizarlo como variable.
Espero que sea eso. Si sigue dándote el error, adjunta el código completo en un mensaje e intentaré ayudarte.
Salu2,
Avalon
cedosd
Nuevo Miembro
Mensajes: 5
Re: Fich. Unix con Perl
«
Respuesta #7 en:
Lunes 7 de Octubre de 2002, 11:08 »
0
Efectivamente, estaba usando use strict, lo he quitado y me sigue pasando lo mismo (si es que soy un novato!!!)
A ver si tu puedes:
#!/usr/bin/perl -w
use CGI;
my $q = new CGI;
my $rtr = $q->param ( "rtr" );
my $calle = $q->param ( "calle" );
my $mac = $q->param ( "mac" );
my $ip = $q->param ( "ip" );
print $q->header( "text/plain" );
# abres el fichero
open INPUT, "/home/oper/noc/fichero.txt");
# guardas todo el contenido del fichero en una variable
my @contenido = <INPUT>;
# cierras el fichero
close(INPUT);
# recorres los datos del fichero
foreach $linea (@contenido) {
chop($linea);
# se busca la lmnea que contiene el texto que nos interesa
if ($linea =~ /b$rtr/i)
{
push(@nuevosdatos, $linea . "n");
# Si se ha encontrado el texto, aqum aqadirmas las lmneas que quieres
insertar
push(@nuevosdatos, "}n");
push(@nuevosdatos, "# C/ $calle n");
push(@nuevosdatos, " host ALO_00{ n");
push(@nuevosdatos, " hardware ethernet $mac; n");
push(@nuevosdatos, " fixed_address $ip; n");
}
else {
# se deja la lmnea como estaba
push(@nuevosdatos, $linea . "n");
}
}
# Ahora vuelcas los nuevos datos en el fichero, borrando los datos que cont
enma anter
#iormente
open(OUTPUT, "+< fichero.txt");
foreach $linea (@nuevosdatos) {
print OUTPUT $linea;
}
close(OUTPUT);
Gracias de antemano, Avalon!!
Avalon
Miembro MUY activo
Mensajes: 448
Fich. Unix con Perl
«
Respuesta #8 en:
Lunes 7 de Octubre de 2002, 13:10 »
0
Hola de nuevo.
La verdad es que no sabría decirte donde puede estar el problema. He estado probando el código y me funciona bién, salvo un error que es debido a un paréntesis que falta en esta línea:
# abres el fichero
open
(
INPUT, "/home/oper/noc/fichero.txt");
No se si el paréntesis se habrá perdido cuando has copiado el código, pero como esa línea está justo encima de la que te da el error, quizá podría estar ahí el asunto, no lo sé.
Siento no poder ser más preciso.
Salu2 y buena suerte,
Avalon
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
Perl
»
Re: Fich. Unix con Perl