#!/usr/bin/perl
use XML::Twig;
my $t = XML::Twig->new(
twig_handlers => {
# for repository tags, if it has the enabled
# attribute, set it to false.
repository => sub {
exists $_->{att}->{enabled} &&
$_->set_att(enabled => 'false');
$_->flush();
},
},
);
$t->parsefile($ARGV[0]);
$t->flush();
Кажется, работает на меня. Возможно, вы захотите поиграть с обратным вызовом для тега хранилища - я не уверен, хотите ли вы всегда устанавливать для включенного атрибута значение false, даже если атрибут отсутствует (удалить первую строку в этом обратном вызове) или только если атрибут есть.
Хорошо, это больше не однострочник. Но это не должно быть требованием, если вы хотите, чтобы все было сделано правильно. Обратите внимание, что поскольку сейчас выполняется синтаксический анализ XML, нам необходим правильно сформированный XML-документ, и нам все равно, будет ли тег репозитория разбит на несколько строк, или если в строке будет более одного тега, или какие другие атрибуты будут у него имеет и т.д.
И это также не относится к вашему тегу "regex" в вашем вопросе. Но это потому, что я думаю, что этот тег превращает это в проблему XY.