[Операционки] FreeBSD и задачка с текстовыми файлами.

Тема в разделе "Софт", создана пользователем need help, 13 фев 2008.

Статус темы:
Закрыта.
  1. need help

    need help

    Регистр.:
    2 сен 2007
    Сообщения:
    149
    Симпатии:
    11
    Приветствую всех, кто заглянул. В *nix и клонах ее я вобщем-то неволоку вовсе :(. Поэтому вот есть такая простенькая задача, которая мне не по плечу.

    Есть FreeBSD на сервере, к которому доступ по shell доступ root`овый. Есть папка, в которой лежит несколько тысяч html файлов - это копия одно сайта, который скачал при помощи wget. Теперь хочется этот сайт скачать себе, но у меня инет дорогой, да и не очень быстрый. Поэтому родилась вполне занная мысль - облегчить html файлы от ненужного кода, которого там хватает, мне нужен только основной контент, а там и баннеры, и счетчики и css на две страницы в каждом файле :(.

    Здача такая - в shell запустить обработку всех этих html файлов, чтобы вырезать и удалить из файлов все, что там есть до определенной строки в файле, строка не фиксированная, а начинается словом

    статья

    Т.е. все, что до слова статься мне нужно удалить.

    Заканчивается полезный контент в файлах словом

    конец статьи


    вот все, что после этого тега так же нужно удалить и сохранить обработанный файл под своим собственным именем т.е. его резервная копия не нужна.


    Я даже не представляю какой командой можно провести эту операцию над всеми файлами в папке :(.

    Может подскажете? По возможности с максимально полным синтаксисом, буду благодарен.
     
  2. poikl

    poikl

    Регистр.:
    7 ноя 2006
    Сообщения:
    164
    Симпатии:
    31
    а нелегче все за рарить он вроди хорошо текст сжимает.
    rar a sait.rar papkasaita
     
  3. need help

    need help

    Регистр.:
    2 сен 2007
    Сообщения:
    149
    Симпатии:
    11
    К сожалению не легче. там слишком много мусора на страницах.
     
  4. Wiltner

    Wiltner Постоялец

    Регистр.:
    4 дек 2007
    Сообщения:
    126
    Симпатии:
    27
    need help
    Вот такой скриптик тебе накатал:
    Код:
    #!/usr/bin/perl
    
    use File::Find;
    
    $ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
    
    my $debug = 1;
    
    my $first_word = '^статья';
    my $second_word = '^конец статьи';
    
    sub finder {
    
            if (-f $_) {
    
                    my $file = $File::Find::name;
    
                    print "$file... " if $debug;
    
                    my $first = `cat $file | grep -n '$first_word' | awk -F: '{print \$1}'`;
                    my $second = `cat $file | grep -n '$second_word' | awk -F: '{print \$1}'`;
    
                    chomp for $first, $second;
                    my $num = $second - $first;
    
                    my $content = `cat $file | grep '$first_word' -A$num`;
    
                    system "echo '$content' > $file";
    
                    print "done\n" if $debug;
            }
    }
    
    find (\&finder, '.');
    Если не нужен никакой лишний вывод на STDIN, поставь $debug в 0.
    Собственно, выполняет все согласно твоему ТЗ :). Просто и качественно.
     
    need help нравится это.
Статус темы:
Закрыта.