Eu recomendo strongmente que o grep / sed não funcione - eles não funcionam para XML.
Mas, felizmente, perl
e XML::Twig
get_xpath funciona muito bem para extrair um valor ou você tem twig_handlers
para manipular elementos dependendo do caso de uso. (Ou apenas iterar usando children
ou similar).
Mas de qualquer forma - para formatar seu XML:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my $twig = XML::Twig->new(
pretty_print => 'nsgmls',
);
$twig->parse (\*DATA);
$twig->print;
__DATA__
<?xml version="1.0"?>
<root>
<foo
z="26"
y="25"
x="24"
a="1"
b="2"
c="3"
d="something more"/>
</root>
em nsgmls
printing, isso dá:
<?xml version="1.0"?>
<root
><foo
a="1"
b="2"
c="3"
d="something more"
x="24"
y="25"
z="26"
/></root>
indented_a
oferece:
<?xml version="1.0"?>
<root>
<foo
a="1"
b="2"
c="3"
d="something more"
x="24"
y="25"
z="26"
/>
</root>
Qual parece ser bem próximo do que você está procurando?