2016-11-30 13 views
4

Kann jemand diese Sed-Shell-Befehl in Jenkins groovy Skript für mich entkommen?jenkins entkommen sed Befehl

So schwer.

sh (""" 
sed "s/(AssemblyInformationalVersion\(\")(.*)(\")/\1${productVersion}\3/g" 
AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r 
""") 
+0

Mögliche Duplikat [Ersetzen Zeichenkette mit variabler mit Groovy und SED-Befehl] (http://stackoverflow.com/questions/ 40878024/Ersetzen-String-mit-Variable-mit-Groovy-und-Sed-Befehl) – doelleri

Antwort

4

Das triple-double-Zitat (""") Stringliteral Syntax ermöglicht variable/expression Substitution (Interpolation), so dass der umgekehrten Schrägstrich (\) als Sonderzeichen "escape" interpretiert. Da der erste offene Paren kein so spezielles Zeichen ist, schlägt die Groovy-Kompilierung fehl. Wenn Sie beabsichtigen, umgekehrte Schrägstriche in der resultierenden Zeichenfolge zu verwenden, müssen Sie die Backslashes umgehen. Verwenden Sie also einen doppelten Backslash (\\), um einen Literal umgekehrten Schrägstrich zu ersetzen.

So:

sh (""" 
sed "s/(AssemblyInformationalVersion\\(\\")(.*)(\\")/\\1${productVersion}\\3/g" 
AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r 
""") 
+0

Double Backslash funktioniert. Vielen Dank. – orange

+1

Es ist einfacher, nur den Snippen-Generator des Plugins zu verwenden. https://jenkins.io/doc/book/pipeline/getting-started/#snippet-generator – walla

+0

Einverstanden. Oder die Textmanipulationsfunktionen in der Groovy-Sprache selbst. – BalRog

1

Also, wenn Sie zum Beispiel einige Zeichen oder Wort in einer String groovy Variable ersetzen, wie "/" mit "/", um Ersatz zu fliehen Sie ein Sonderzeichen, das in unserem Fall der Schrägstrich ist, können Sie den Code unten verwenden.

Danach können wir den Befehl linux sed anwenden, ohne einen Fehler zu bekommen (zum Beispiel mit sed, um einen Platzhalterwert durch den gewünschten Wert in einer .env-Datei zu ersetzen).

Im Folgenden zeigen einen Jenkins Pipeline Groovy Code:

 String s = "A/B/C" 
     your_variable = s.replace("/", "\\/") 
     sh "sed -i -e 's/string_to_replace/${your_variable}/g' path/to/file/.env" 

HINWEIS:${your_variable} wird den Inhalt Ihrer Variable erhalten.

VALIDATION:

echo "Your variable new content: ${your_variable}" 

ERGEBNIS:

Your variable new content: A\/B\/C