Да, не использовать sed
в XML
. Плохие новости.
Я думаю, ваша проблема на самом деле заключается в простом цитировании - вы указываете свой xpath
в одинарных кавычках, а Elem
также в одинарных кавычках.
У меня нет под рукой копии xmllint
, но это работает:
#!/usr/env/perl
use strict;
use warnings;
use XML::LibXML;
my $xml = XML::LibXML -> load_xml ( IO => \*DATA );
print $xml -> findnodes('//XML/*[local-name()="Elem"]');
__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<hhi:Elem xmlns:hhi="http://www.w3.org/TR/html4/" version="1.0" sn="101">
</hhi:Elem>
</XML>
Это печатает:
sn="101"
Вам также не нужен XML
, потому что //
означает «где угодно в дереве».Итак, вы можете использовать:
//*[local-name()="Elem"]/@sn
/XML/*[local-name()="Elem"]/@sn
Для полноты картины, зарегистрировав пространство имен, вы можете сделать это следующим образом:
#!/usr/env/perl
use strict;
use warnings;
use XML::LibXML;
my $xml = XML::LibXML -> load_xml ( IO => \*DATA );
my $xpc = XML::LibXML::XPathContext -> new;
$xpc -> registerNs('x', 'http://www.w3.org/TR/html4/');
print $xpc -> findnodes('/XML/x:Elem/@sn', $xml);
__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<hhi:Elem xmlns:hhi="http://www.w3.org/TR/html4/" version="1.0" sn="101">
</hhi:Elem>
</XML>
Теперь я знаю, что это напрямую не помогает с xmllint
, кроме разрешения тестирование используемого вами xpath
. Но я думаю, что вас сбивают с толку цитаты, а не xpath
.
Могу я предложить вам:
xmllint --xpath '//*[local-name()="Elem"]/@sn' FILE_1.xml
Чтобы определить, как удалить часть программного обеспечения, установленного таким образом, вам нужно прочитать сценарий, используемый для выполнения установки, и определить, что он сделал, а затем отменить это. Использование паттернов стиляcurl | sh
-означает, что скрипт установки не сохраняется, поэтому нам нужно загрузить текущую версию и надеяться, что его поведение не изменилось с момента установки.
В данном конкретном случае удаление выполняется просто, если исходить из значений по умолчанию.:
~/.mos/bin/mos
— это единственный файл, добавляемый при установке; ~/.mos/bin
пусто, удалить его, а затем, если ~/.mos
пусто, удалить его; ~/.bashrc
или ~/.profile
, чтобы удалить строку, добавив ~/.mos/bin
к PATH
. Если вы указали другой DESTDIR
при установке, вам нужно вместо этого удалить mos
из этого каталога.