Я использую старое rcs
для этого.
Взгляните на страницы справочника для ci
, co
, и rcs
. Те сайты должны быть полезными также:
Я использую это для версии, управляющей моим dotfiles, например:
ci -u .*vimrc
И если я хочу отредактировать их:
co -l .*vimrc
Я рекомендую делать каталог названным RCS
в Вашем ~
, можно затем легко скопировать тот каталог где-нибудь.
html-xml-utils пакет, доступный в большинстве главных дистрибутивов Linux, имеет много инструментов, которые полезны при контакте с HTML и XML-документами. Особенно полезный для Вашего случая hxselect
который читает из стандартного входа и извлекает элементы на основе селекторов CSS. Ваш вариант использования был бы похож:
hxselect '#the_div_id' <file
Вы могли бы получить жалобу на вход, не хорошо сформированный в зависимости от того, что Вы подаете его. Эта жалоба дана по стандартной погрешности и таким образом может быть легко подавлена в случае необходимости. Альтернатива этому была бы, чтобы быть для использования HTML Perl:: пакет СИНТАКСИЧЕСКОГО АНАЛИЗАТОРА; однако, я оставлю это кому-то с навыками Perl менее ржавым, чем мое собственное.
Вот непротестированный сценарий 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
.
Вот однострочный пример 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
), но он должен работать.
hxselect
более требовательно в отношении формата ввода, чемpup
. Например, я добираюсьInput is not well-formed. (Maybe try normalize?)
сhxselect
гдеpup
просто парсинг его. – A B 20.07.2016, 01:32