Re: Script para quitar bloques html
> Hola gente, tengo un ficherito html de 5.6 MB en el que
> ciertos patrones (bloques, como </body></html><html>...<body...>)
> se unas 350 veces. Borrarlos uno a uno me parece un suicidio
> a menos que el vi sea capaz de hacerlo y alquien me cuente
> cómo 0:-). Una primera idea es ¿cómo puedo en bash script
> volcar el contenido de un fichero entre dos líneas? P.ej.,
> quiero volcar el contenido del fichero hola.c entre las líneas
> 4 y 44, luego entre la 94 y la 135, etc. ¿algún comando que
> permita esto a base de empipados/entubados?
Hace tiempo hice algo por el estilo, pero lo aplicaba a todo un directorio
de archivos con contenido HTML. Consta de dos scripts:
#!/bin/sh
#####unhtml.sh#####
cp -rf $1 $2
cd $1
for i in `find $1|grep \.html$`; do
./unhtml.pl $i ../$2/$i;
################### FIN DE ARCHIVO
#!/usr/bin/perl
#####unhtml.pl#####
use strict;
use vars qw($enTag);
my ($linea,$infile,$outfile);
&errorinvoca() if ($#ARGV != 1);
$enTag=0;
$infile = $ARGV[0];
$outfile = $ARGV[1];
open (IN,$infile) or die "No pude abrir el archivo de entrada $infile";
open (OUT,">$outfile") or die "No pude abrir el archivo de salida $outfile";
while ($linea=<IN>) {
$linea=&procesa($linea);
print OUT $linea;
}
close (IN);
close (OUT);
exit 0;
sub errorinvoca {
print "ERROR DE INVOCACION\n";
print "Sintaxis correcta:\n";
print "unhtml <fuente> <destino>\n\n";
exit 1;
}
sub procesa {
my ($in,$tmp,$out);
$in=$_[0];
$out='';
$tmp='';
while ($in) {
# $tmp es la primera letra de $in. Le quitamos la primera letra a $in.
($tmp,$in)=(substr($in,0,1),substr($in,1));
if ($tmp eq '<') {
# Si encontramos un < significa que entramos a un tag - prendemos $enTag
$enTag = 1;
} elsif ($tmp eq '>') {
# Si encontramos un > significa que termina un tag, y apagamos $enTag
$enTag = 0;
} else {
# Si estamos en un tag, pasamos al siguiente caracter
next if ($enTag == 1);
$out .= $tmp;
}
}
return $out;
}
################### FIN DE ARCHIVO
Lo llamas:
./unhtml.sh dir_fuente dir_destino
No recuerdo detalles específicos, pero es corto y no está difícil de
seguir ;-)
------------------------------------------------------------
Gunnar Wolf - gwolf@campus.iztacala.unam.mx - (+52)5623-1118
Desarrollo y Admon. de Sistemas en Red - FES Iztacala - UNAM
Departamento de Seguridad en Computo - DGSCA - UNAM
------------------------------------------------------------
Quidquid latine dictum sit, altum viditur.
Reply to: