2017-06-06 75 views
0

替換字符串考慮這個文件在PowerShell中使用正則表達式用單引號

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 
} 

我想用一個字符串替換單引號內的字符串。我想改變特定屬性的值(在我的例子中爲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> 
    }  
} 

更優雅的方式如何找到與version行是讚賞。

回答

2

如果你只是想更換引號版本中的文本,你可以做到以下幾點:

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

它會在你的文本替換4.0.0通過<ReplaceWith>

+0

@pandemic:如果你想替換單引號內的任何字符串,你必須爲每個替換都做這個,beca使用我猜想替換文本將不會是相同的每個項目 – Gawil

0

你可以試試這個:

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

您需要使'*'懶惰,否則它將無法正常工作。你的正則表達式將從'version'匹配到''rest','這裏 – Gawil

+0

你是什麼意思使*懶惰?我的代碼工作,但我可以改善我的正則表達式;-) – Manu

+0

默認情況下,'*'是貪婪的。這意味着它會匹配儘可能多的角色。在這裏,他會停下來閱讀最後的文字。讓他懶惰是通過在它後面添加一個'?'來完成的,所以它可以匹配最少的字符。 – Gawil

相關問題