Как проанализировать сотню файлов исходного кода HTML в оболочке?

Я использую старое rcs для этого.

Взгляните на страницы справочника для ci, co, и rcs. Те сайты должны быть полезными также:

Я использую это для версии, управляющей моим dotfiles, например:

ci -u .*vimrc

И если я хочу отредактировать их:

co -l .*vimrc

Я рекомендую делать каталог названным RCS в Вашем ~, можно затем легко скопировать тот каталог где-нибудь.

23
10.10.2015, 16:30
4 ответа

html-xml-utils пакет, доступный в большинстве главных дистрибутивов Linux, имеет много инструментов, которые полезны при контакте с HTML и XML-документами. Особенно полезный для Вашего случая hxselect который читает из стандартного входа и извлекает элементы на основе селекторов CSS. Ваш вариант использования был бы похож:

hxselect '#the_div_id' <file

Вы могли бы получить жалобу на вход, не хорошо сформированный в зависимости от того, что Вы подаете его. Эта жалоба дана по стандартной погрешности и таким образом может быть легко подавлена в случае необходимости. Альтернатива этому была бы, чтобы быть для использования HTML Perl:: пакет СИНТАКСИЧЕСКОГО АНАЛИЗАТОРА; однако, я оставлю это кому-то с навыками Perl менее ржавым, чем мое собственное.

27
27.01.2020, 19:41
  • 1
    hxselect более требовательно в отношении формата ввода, чем pup. Например, я добираюсь Input is not well-formed. (Maybe try normalize?) с hxselect где pup просто парсинг его. –  A B 20.07.2016, 01:32

Вот непротестированный сценарий Perl, который извлекает <div id="the_div_id"> элементы и их использование содержания HTML::TreeBuilder.

#!/usr/bin/env perl
use strict;
use warnings;
use HTML::TreeBuilder;
foreach my $file_name (@ARGV) {
    my $tree = HTML::TreeBuilder->new;
    $tree->parse_file($file_name);
    for my $subtree ($tree->look_down(_tag => "div", id => "the_div_id")) {
        my $html = $subtree->as_HTML;
        $html =~ s/(?<!\n)\z/\n/;
        print $html;
    }
    $tree = $tree->delete;
}

Если у Вас аллергия на Perl, Python имеет HTMLParser.

P.S. Не пытайтесь использовать регулярные выражения..

4
27.01.2020, 19:41

Вот однострочный пример Ex для извлечения этой части из каждого файла:

ex -s +'bufdo!/<div.*id=.the_div_id/norm nvatdggdG"2p' +'bufdo!%p' -cqa! *.html

Чтобы сохранить / заменить на месте, измените -cqa ! в -cxa и удалите раздел % p . Для рекурсивности рассмотрите возможность использования подстановки ( ** / *. Html ).

В основном для каждого буфера / файла ( bufdo ) он выполняет следующие действия:

  • / pattern - найти шаблон
  • norm - начать моделирование нормального Vi нажатия клавиш
    • n - перейти к следующему шаблону (требуется в режиме Ex)
    • vatd - удалить выбранную секцию внешнего тега (см .: прыжок между тегами html )
    • ggdG - удалить весь буфер (эквивалент :% d )
    • "2p - повторно вставить ранее удаленный текст

Может быть, не очень эффективно и не POSIX (: bufdo ), но он должен работать.

1
27.01.2020, 19:41

Попробуйте pup , инструмент командной строки для обработки HTML. Например:

pup '#the_div_id' < file.html
12
27.01.2020, 19:41

Теги

Похожие вопросы