/ / Nie można dodać nowych tagów w xml przy użyciu sed w powłoce linux [duplikat] - regex, xml, shell, maven, sed

Nie można dodać nowych znaczników w xml używając sed w powłoce linux [duplicate] - regex, xml, shell, maven, sed

Próbuję dodać element xml w moim pliku „pom.xml” w określonym miejscu, próbowałem jako odpowiedź wspomniana w następujący pytanie. Ale nadal nie działa .. Nie rozumiem REGEX, więc mam problem ze znalezieniem problemu.

Muszę dodać następujący element xml między tagiem „właściwości” i „zależności”.

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

„pom.xml (przed)”

<?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 (After)

<?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>

Skrypt powłoki:

#!/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"

Wystąpił błąd:

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

Pomóż mi, że jeśli wykonuję właściwe polecenie lub podejście. Jeśli istnieje inne polecenie, które wykona zadanie, ale powinno być obsługiwane zarówno w „Ubuntu" i "Czerwony kapelusz".

Odpowiedzi:

1 dla odpowiedzi № 1

sugerowałbym

#!/bin/bash

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

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

To instruuje awk, aby wydrukował wszystkie linie i dodatkowo wydrukował content (tutaj ustawione na "$CONTENT"), jeśli bieżąca linia pasuje </properties>. Ogólnie rzecz biorąc, uważam, że jeśli pokusisz się o zastąpienie zmiennych powłoki poleceniami sed, warto zamiast tego rozważyć awk. Inni prawdopodobnie się nie zgodzą.