/ / Impossible d’ajouter de nouveaux tags dans XML avec sed dans le shell linux [duplicate] - regex, xml, shell, maven, sed

Impossible d'ajouter de nouvelles balises dans xml en utilisant sed dans le shell linux [dupliquer] - regex, xml, shell, maven, sed

J'essaie d'ajouter un élément XML dans mon fichier "pom.xml" à un endroit particulier, j'ai essayé comme réponse mentionnée dans le Suivant question. Mais ça ne marche toujours pas .. Je ne comprends pas REGEX, alors j’ai du mal à comprendre le problème.

Je dois ajouter l'élément XML suivant entre les balises "properties" et "dependencies".

<distributionManagement>
<repository>
<id>deployment</id>
<name>Internal Releases</name>
<url>http://your.server.com:8081/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>

"pom.xml (avant)"

<?xml version="1.0" encoding="utf-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>Component</artifactId>
<version>1.0.0</version>
<packaging>carbon/application</packaging>
<properties>
....
</properties>
<dependencies>
<dependency>
<groupId>com.example.proxy-service</groupId>
<artifactId>Handler</artifactId>
<version>1.0.0</version>
<type>xml</type>
</dependency>
</dependencies>
</project>

pom.xml (après)

<?xml version="1.0" encoding="utf-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>Component</artifactId>
<version>1.0.0</version>
<packaging>carbon/application</packaging>
<properties>
....
</properties>
<distributionManagement>
<repository>
<id>deployment</id>
<name>Internal Releases</name>
<url>http://your.server.com:8081/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>
<dependencies>
<dependency>
<groupId>com.example.proxy-service</groupId>
<artifactId>Handler</artifactId>
<version>1.0.0</version>
<type>xml</type>
</dependency>
</dependencies>
</project>

Script shell:

#!/bin/sh

# First Script



CONTENT="<distributionManagement>n<repository>n<id>deployment</id>n</repository>n</distributionManagement>"



echo "Start"

C=$(echo $CONTENT | sed "s///\//g")
sed "/</project>/ s/.*/${C}n&/" *pom.xml*



echo "finish"

Erreur je reçois:

sed: -e expression #1, char 43: unterminated `s" command

Aidez-moi s'il vous plaît que si je suis la bonne commande ou approche. S'il y a une autre commande qui fera le travail mais qui devrait être supportée à la fois "Ubuntu" et "Chapeau rouge".

Réponses:

1 pour la réponse № 1

je voudrais suggerer

#!/bin/bash

CONTENT="  <distributionManagement>
<repository>
<id>deployment</id>
</repository>
</distributionManagement>"

awk -v content="$CONTENT" "{ print $0 } /</properties>/ { print content }" pom.xml

Ceci indique à awk d’imprimer toutes les lignes et d’imprimer content (ici réglé sur "$CONTENT") si la ligne actuelle correspond </properties>. En général, je trouve que si vous êtes tenté de substituer des variables du shell à des commandes sed, il vaut mieux envisager awk. D'autres seront probablement en désaccord.