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 № 1sugerował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ą.