2017-02-14 4 views
0

ich versuche, eine Version nummber auf allen Linien, die das Muster etwas ähnliches enthalten zu ersetzen: modulepropsed: Mit Bezug auf Teile des Anpassungsmuster

<module name="XYZ_Web"> 
     <moduleprop name="war" value="xyzz-web-2.23.12-SNAPSHOT.war"/> 
     <moduleprop name="starting_weight" value="6000"/> 
     <moduleprop name="virtualHost" value="default_host"/> 
    </module> 
    <module name="XYZ_Export_EJB"> 
     <moduleprop name="jar" value="xyzl-export-ejb-2.23.12-SNAPSHOT.jar"/> 
     <moduleprop name="starting_weight" value="1000"/> 
    </module> 

Mein sed Befehl findet alle Zeilen Ich suche nach:

Mit diesem Ansatz kann ich nicht auf jede Regex verweisen und den Wert verwenden. Ich habe versucht, mit \ 1 \ 2 zu verweisen, aber meine Cygwin klagt mit:

sed: -e Ausdruck #1, Zeichen 25: Ungültiger Verweis \1 im rechten Teil (`RHS') des `s'-Befehls 
+0

* um eine Versionsnummer auf allen Zeilen zu ersetzen * - was ist der Ersatzwert? – RomanPerekhrest

Antwort

2

Um Teile der gefundenen String müssen beziehen sich auf mit \1 etc, müssen Sie sie erfassen. In classic sed verwenden Sie \(, um eine Erfassung zu starten, und \), um es zu beenden. Die Aufnahmen werden in der Reihenfolge der \( Marker nummeriert.

Sie könnten verwenden:

sed 's/\(<moduleprop name="[j|w]ar" value="xyz[z|l]-[a-z-]*\)\(2\.23\.12-SNAPSHOT\)\(\.[j|w]ar"\/>\)/1=\1; 2=\2; 3=\3/g' my-file.xml 

Wenn es sein muss, können Aufnahmen verschachtelt werden.

+0

Das war das fehlende Stück, danke! – myborobudur