2017-11-26 11 views
0

Ich habe changelog_master.xml wie folgt:Wie schreibe ich Text über das Schließen-Tag meiner XML-Datei mit sed (Jenkinsfile)?

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog 
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"> 

    <include file="changelog/version/changelog_1.0.xml"/> 

</databaseChangeLog> 

I Text über dem nahe Tag meiner Datei

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog 
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"> 

    <include file="changelog/version/changelog_1.0.xml"/> 
    <include file="changelog/version/changelog_1.1.xml"/> 

</databaseChangeLog> 

wie diese einfügen möchte ich durch Verwendung sed wie dies versucht haben, weil ich brauche um es in Jenkinsfile für Automatisierung zu schreiben

sh "sed -i '/<\/databaseChangelog>/i <include file=\"changelog/version/changelog_${version}.xml\"/>' changelog/changelog_master.xml" 

Aber es funktioniert nicht. Ich habe auch viele verwandte Fragen ausprobiert.

Was soll ich jetzt tun?

Danke!

+0

Wie ist es "funktioniert nicht"? Was sind deine Ergebnisse? –

+0

Erhalten diff_Jenkinsfile von git [email protected]: FINIZ-Repo/FINIZ-Liquibase.git org.codehouse.groovy.control.MultipleCompilationErrorsException: Start fehlgeschlagen: WorkflowScript: 25: Unerwartetes Zeichen: '\' @ Linie 25, Spalte 19. sh "sed -i '/ <\/databaseChange-log>/i ' changelog/changelog_master.xml" –

+0

Ich schlage vor Verwenden Sie einen XML/HTML-Parser (xmlstarlet, xmllint ...). – Cyrus

Antwort

0

einen untergeordneten Knoten hinzufügen und ein Attribut mit xmlstarlet in einer XML-Datei mit Namensraum einfügen:

xmlstarlet edit \ 
    --omit-decl -N x="http://www.liquibase.org/xml/ns/dbchangelog" \ 
    --subnode "//x:databaseChangeLog" -t elem -n "include" \ 
    --insert "//x:databaseChangeLog/include" -t attr -n "file" --value "changelog/version/changelog_1.1.xml" file.xml 

Ausgabe auf stdout:

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"> 
    <include file="changelog/version/changelog_1.0.xml"/> 
    <include file="changelog/version/changelog_1.1.xml"/> 
</databaseChangeLog> 

Wenn Sie Datei Inplace bearbeiten möchten, fügen Sie Option -L.

See: xmlstarlet edit --help

0

funktioniert auch sed, hier ist meine Version (Sie Tippfehler in der passenden Vorlage hatte)

$ sed -i "/<\/databaseChangeLog>/i\<include file=\"changelog/version/changelog_${version}.xml\"/>" changelog/changelog_master.xml 
Verwandte Themen