2017-12-10 9 views
-1
<?xml version='1.0' encoding='utf-8'?> 
<widget id="io.ionic.starter" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> 
... 
</widget> 

Wie kann ich ID und Version im Widget mit sed ersetzen?Wie ersetze ich Attribute der XML-Datei mit dem Shell-Skript-Befehl sed?

+2

Verwenden Sie nicht sed, um XML-Dateien zu verarbeiten. Verwenden Sie ein XML-fähiges Tool. – choroba

+0

Ich habe eine Einschränkung der Verwendung eingebauter Funktionen. Wie ich es in mehreren Servern laufen lassen werde – rakshans1

+0

Sprechen Sie mit den Leuten, die die Einschränkungen festlegen. Sie ergeben keinen Sinn. – choroba

Antwort

1

Sed ist nicht das richtige Werkzeug, um mit XML zu arbeiten, da die Attribute in unterschiedlicher Reihenfolge und/oder unterschiedlichen Zeilen erscheinen können, während sie immer noch dieselbe Semantik beibehalten.

Verwenden Sie ein XML-Tool. Zum Beispiel in xsh (ein Wrapper um XML::LibXML derzeit von mir gepflegt), können Sie einfach

open file.xml ; 
register-namespace w http://www.w3.org/ns/widgets ; 
set /w:widget/@id "new.id" ; 
set /w:widget/@version "0.0.2" ; 
save :b ; # :b creates a backup. 
+0

Ich muss dies erreichen, ohne irgendwelche Abhängigkeiten zu installieren .. ist es möglich .. ?? – rakshans1

+0

Es hängt davon ab, was bereits installiert ist. Es gibt viele ähnliche Werkzeuge, z.B. XMLStarlet, sogar xmllint hat einige eingeschränkte Fähigkeiten. – choroba

+0

frische linux .. und die Reihenfolge wird immer gleich sein – rakshans1

1

Mit xmlstarlet schreiben:

xmlstarlet edit -N x='http://www.w3.org/ns/widgets' \ 
       --update "//x:widget/@id" --value "foo" \ 
       --update "//x:widget/@version" --value "bar" file.xml 

Ausgang:

<?xml version="1.0" encoding="utf-8"?> 
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" id="foo" version="bar"> 
... 
</widget> 

Wenn Sie möchten, Datei inplace bearbeiten, Option -L hinzufügen.

+0

Wie ändern Sie E-Mail und href und Wert in dieser Zeile Autorenname rakshans1

+0

@ rakshans1: Ich empfehle, eine neue Frage zu starten und anzugeben, ob Sie Namespaces ('xmlns =" ​​... "') in Ihrer XML-Datei verwenden. – Cyrus

Verwandte Themen