2017-05-22 1 views
-2

Das ist mein xml unterWie aktualisiere ich das XML-Dateiattribut mit einem neuen Wert (Datum hinzufügen) im Shell-Skript?

<Deployer exitOnError="true" sourceType="Repository"> 
<Projects projectPrefix=""> 
<SubProject description="" name="Ship" overwrite="false" type="Repository"> 
</SubProject> 
</Projects> 
</Deployer> 

I Name o Änderung = "Schiff" zu name = "Schiff" + Current mit Shell-Skript möchten. Jede Hilfe wird geschätzt.

Ich möchte vorzugsweise sed oder awk verwenden (I xmlstarlet nicht wollen, wie ich kann nicht xml-Tool-Box auf meinem Linux-Maschine)

Hier finden Sie, was ich versuchte.

sed "/DeployerSpec>/,<Project description='' name='bstar' overwrite='false' type='Repository'>" file 

sed -i 's:<DeployerSpec exitOnError="true" sourceType="Repository"><Projects projectPrefix=""><Project description="" name="bstar" overwrite="false" type="Repository"></Project></Projects></DeployerSpec>:<DeployerSpec exitOnError="true" sourceType="Repository"><Projects projectPrefix=""><Project description="" name="bstar"+$(date+%x_%r) overwrite="false" type="Repository"></Project></Projects></DeployerSpec>:' sample.xml 

sed -i.bak "s/<Project description='' name='bstar' overwrite='false' type='Repository'>/<Project description='' name='bstar'+$(date +%x_%r) overwrite='false' type='Repository'>/g" a.xml 
+0

* ich nicht xml-Tool-Box auf meinem Linux * haben kann - aber man kann sie einfach installieren, da sie eine sind PROPER Tools für XML-Daten manipulieren – RomanPerekhrest

+0

gut mein Client nicht, dass mein Manager besteht darauf, dies mit Shell-Scripting allein zu beheben! –

+0

'mein Manager besteht darauf, dies mit Shell Scripting allein zu beheben 'dann schreibe einen und frage, ob Sie stecken bleiben ... – Sundeep

Antwort

1

Versuch:

DATE=$(date) 
sed 's/Ship/& '"${DATE}"'/g' Input_file 

eine Variable mit dem Namen DATE schaffen, das aktuelle Datum hat, dann einfach mit sed Schnur Schiff mit Schiff und die aktuellen Datum zu ersetzen.

2

Der Kampf mit Managern und Kunden ist ein ewiger Prozess ... Ich verstehe.
Für Sie einfachen Fall können Sie verwenden sed Ansatz:

sed -i 's/name="Ship"/name="'"$(date)"'"/g' your.xml 

der XML-Datei Inhalt (Sie werden einen anderen Datetime an Ihrem Standort haben):

<Deployer exitOnError="true" sourceType="Repository"> 
<Projects projectPrefix=""> 
<SubProject description="" name="Mon 22 May 15:41:23 EEST 2017" overwrite="false" type="Repository"> 
</SubProject> 
</Projects> 
</Deployer> 

  • -i - um die Datei vor Ort zu ändern

  • $(date) - aktuelle Datetime-Wert


Auf jeden Fall erhalten, wenn es wie „change Attribut name Wert komplexer und anspruchsvoller Aufgaben wäre, wenn es ein Kind des Elements Eltern ServiceProject und dass Eltern sollten haben auch ein Kind Element city mit Attribut balance größer als 1000 ". Unix-Shell-Tools werden in solchen Fällen scheitern und Ihre Manager eine Notwendigkeit, ihre Haltung würde für XML-Parser zu überdenken

0
sudo sed -i '/<Project\s\description=""/s/name="[^"]*/name="'"$(date)"'"/g' Demo.xml 
+0

Vielen Dank für dieses Code-Snippet, das einige sofortige Hilfe bieten kann. Eine richtige Erklärung [würde erheblich verbessern] (// meta.stackexchange.com/q/114762) ihren pädagogischen Wert, indem sie * warum * dies eine gute Lösung für das Problem ist, und es für zukünftige Leser mit ähnlichen, nützlicher machen würde, aber nicht identisch, Fragen. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. Und beheben Sie die Fehler, bevor Sie die Verwendung von 'sudo' vorschlagen! –

Verwandte Themen