Necesitaria saber como, con un script de perl ejecutando el scrip:
./scrip.pl dire...@dominio.com puedo hacer que me borre esa linea del
archivo y no las demas.
Para ello tengo hecho lo siguente pero no me funciona:
a este script se le llama scrip arg1
como veis el script es para eliminar usuairos de la tabla access del
sendmail
#!/usr/bin/perl
$n=scalar(@ARGV);
if ($n != 1) {
printf ("Uso: usrdel buzon direccionemail\n");
exit(1);
}
$email=@ARGV[0]
open (acc, '/etc/mail/access');
open (ac, '>/etc/mail/access.tmp');
while (<acc>) {
chop();
($from,$resto) = split (/:/);
if (!($buzon eq $user)) {
print ac "$dir\t$buzon\n";
}
}
close (acc);
close (ac);
open (a1, '/etc/mail/access.tmp');
open (a2, '>/etc/mail/access.tmp.tmp');
while(<a1>){
chop();
($email2,$relay) = split (/\t/);
if(!($email2 eq $email)){
print a2 "From:$email\tRELAY\n";
}
}
GRACIAS
: Necesitaria saber como, con un script de perl ejecutando el scrip:
: ./scrip.pl dire...@dominio.com puedo hacer que me borre esa linea del
: archivo y no las demas.
no uses perl, usa grep
egrep -v ":$direccion " /etc/mail/access > /tmp/access.$$ &&
mv /tmp/access.$$ /etc/mail/access
--
PGP and other useless info at \
http://www.cps.unizar.es/~spd/ \
finger://daphne.cps.unizar.es/spd \ Timeo Danaos et dona ferentes
ftp://ivo.cps.unizar.es/pub/ \ (Virgilio)
Por que no escapas todos los caracteres susceptibles de causar problemas en una
expresion regular y usas en resultante( $expr) e una expresion regular en un
bucle
wile <> { #mientras haya entradas util para usar como filtro
my $linea = $_;
if (=~ /$expr/u) #si coincide con emilio ignarando el caso
{} #nada
else {print $linea) #Buena
}while
--
Los programadores esta ocupados intendtado mejorar los programas a prueba de
idiotas. Mientras tanto el universo intenta mejorar los idiotas. El universo
va ganando
#!/usr/bin/perl
$n=scalar(@ARGV);
if ($n != 2) {
printf ("Uso: usrdel buzon direccionemail\n");
exit(1);
}
$user=@ARGV[0];
$email=@ARGV[1];
##esto es nuevo
open (acc, '/etc/mail/access');
while(<acc>){
my $linea=$_;
if(=~/$email/u/)#aqui da el error
{}
else{
print $linea;
}
}
he marcado la linea de error. żcomo la tendría que poner?
gracias
¿Y usando sed?
sed '/direccion/ d' /etc/mail/access > /tmp/access.$$ &&
mv /tmp/access.$$ /etc/mail/access
--
Fernando Arbeiza
Cantabria, Spain
sed -e s/^direccion@dominio// fichero > fichero1
y en fichero1 tienes todo el contenido de fichero
excepto tu linea.
--
Jes
jj...@gmx.net
-------------
"He was a modest, good-humored boy. It was Oxford that made him
insufferable."
prueba de escapar el '/'
if( =~ /$email\/u/)
$user=@ARGV[0];
$email=@ARGV[1];
my $ParaDebug = 1;
sub aviso
{
my $mensage =$_[0];
if ($ParaDebug) {print "\n$mensage\n";}
}
aviso "\$user: $user \$email :$email";
$email =~ s/\./\\./; #creamos expresion regular man perlre
#omitir si queremos eliminar por expresion regular
#podriamos añadir si lo queres rodeado de blancos
aviso "\$user: $user \$email :$email";
while(<STDIN>)
{
my $linea=$_;
if($linea =~ /$email/i)#aqui da el error
{aviso "eliminado"}
else
{print "$linea";}