2017-06-06 3 views
0

diese Datei unter BerücksichtigungMit Regex in Powershell ersetzen Zeichenfolge in einfache Anführungszeichen

AppConfig = { 
    version: '4.0.0', 
    clientId: "guid", 
    httpProxy: 'rest', 
    restUrl: "http://url.contoso.com/v1/", 

    conferences: ["lync", "hangouts", "webex"], // "lync", "hangouts", "webex" 

    dataRefreshInterval: 60 //seconds 
} 

ich die Zeichenfolge innerhalb der einfachen Anführungszeichen durch eine andere Zeichenfolge ersetzen möchten. Ich möchte den Wert der spezifischen Eigenschaft ändern (in meinem Fall version).

$content = Get-Content $VersionFile 

for($i = 0;$i -lt $content.Count; $i++) 
{ 
    if($content[$i] -like "*version:*") 
    { 
     $content[$i] = $content[$i] -creplace <replaceWhat>, <replaceWith> 
    }  
} 

elegante Art und Weise, wie die Zeile mit version zu finden, ist sehr geschätzt.

Antwort

2

Wenn Sie nur den Text innerhalb der Anführungszeichen für die Version ersetzen möchten, können Sie folgendes tun:

$content = Get-Content $VersionFile 
$replacement = <ReplaceWith> 
$content = $content -creplace "version: '[^']*'","version: '$replacement'" 

Es wird 4.0.0 ersetzen durch <ReplaceWith> in Ihnen Text

+0

@pandemic: Wenn Sie eine beliebige Zeichenfolge in einfache Anführungszeichen ersetzen möchten, würden Sie dies für jeden Ersatz, beca zu tun haben, Verwenden Sie, ich denke, der Ersatztext wird nicht für jeden Artikel identisch sein – Gawil

0

Sie können dies versuchen:

$version = "x.x.x.x" 
$content = Get-Content $VersionFile 
$content -replace "version: '(.*)'","version: '$version'" 
+0

Sie müssen das '*' faul machen, sonst wird es nicht funktionieren. Deine Regex wird von 'version' zu' 'rest' 'passen, hier – Gawil

+0

Was meinst du mit dem * faul? Mein Code funktioniert, aber ich bin in Ordnung, um meine Regex zu verbessern ;-) – Manu

+0

Standardmäßig ist das '*' gierig. Es bedeutet, dass so viele Charaktere wie möglich zusammenpassen. Hier wird er bis zum letzten ''' des Textes anhalten. Um ihn faul zu machen, wird ein '?' Nach ihm eingefügt, damit es mit den wenigsten möglichen Zeichen übereinstimmt. – Gawil

Verwandte Themen