Ich muss dies mit einem Unix-Skript oder einem Befehl tun. In / home / user / app / xmlfiles befindet sich eine XML-Datei wie
<book>
<fiction type='a'>
<author type=''></author>
</fiction>
<fiction type='b'>
<author type=''></author>
</fiction>
<Romance>
<author type=''></author>
</Romance>
</book>
Ich möchte den Autorentyp in der Fiktion als lokal bearbeiten.
<fiction>
<author type='Local'></author>
</fiction>
Ich muss den Autorentyp, der sich im Fiction-Tag befindet, nur mit dem Attribut b ändern . Bitte helfen Sie mir dabei mit einem Unix-Shell-Skript oder -Befehl. Vielen Dank !
bash
unix
shell
shell-script
bash-scripting
VRVigneshwara
quelle
quelle
xlstproc
. linux.byexamples.com/archives/463/xslt-processor-command-lineAntworten:
Wenn Sie nur ersetzen möchten
<author type=''><\/author>
mit<author type='Local'><\/author>
, können Sie diese verwendensed
Befehl ein :Beim Umgang mit XML empfehle ich jedoch einen XML-Parser / Editor wie xmlstarlet :
Verwenden Sie das
-L
Flag, um die Datei inline zu bearbeiten, anstatt die Änderungen zu drucken.quelle
Wir könnten ein xsl-Dokument verwenden
doThis.xsl
und dassource.xml
mitxsltproc
zu einem verarbeitennewFile.xml
.Das xsl basiert auf der Antwort auf diese Frage .
Fügen Sie dies in eine
doThis.xsl
Datei einJetzt produzieren wir die
newFile.xml
Dies wird die sein
newFile.xml
Der Ausdruck, der verwendet wird, um Fiktion vom Typ b zu finden, ist
XPath
.quelle
quelle
man xmlstarlet
Es ist ganz einfach mit
sed
. Das folgende Skript ändert den Inhalt der Dateia.xml
und legt das Originala.bak
als Backup ab.Es durchsucht jede Datei nach der Zeichenfolge
<author type=''>
und ersetzt sie durch<author type='Local'>
. Der/g
Modifikator bedeutet, dass versucht wird, wenn möglich mehr als 1 Ersetzung in jeder Zeile vorzunehmen (für Ihre Beispieldatei nicht erforderlich).quelle