>       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 - [EMAIL PROTECTED] - (+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.

Responder a