使用powershell替换文本文件中的char

时间:2016-05-13 23:10:52

标签: string powershell replace

我试图替换文本文件中的某个部分。 首先我搜索文本文件中是否存在

$check = Get-Content sample.txt | Where-Object {$_.Contains('<add key="IIS_VERSION" value="7" />')}

if ($checkIISv)
{
Write-Host "IIS's version is already 7"
}
else
{
Write-Host "Update IIS version to 7"

# I want to place here a code that will replace the value="7" if it is not =7
# This value is usually not 7

}

请帮助,我不认为替换功能可以在这里使用,因为&#34;值&#34;被认为是未知的。

4 个答案:

答案 0 :(得分:2)

您可以使用带有正则表达式模式的-replace来替换该值。但是,这是一个web / app xml-config,因此您应该将其修改为XML文档。实施例

#$xml = [xml](Get-Content "c:\folder\app.config")
$xml = [xml]@"
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="IIS_VERSION" value="8" />
    <add key="somekey" value="somevalue" />
  </appSettings>
</configuration>
"@

$IISVersion = $xml.SelectSingleNode("//add[@key='IIS_VERSION']")

if ($IISVersion.Value -eq 7)
{
    Write-Host "IIS's version is already 7"
}
else
{
    Write-Host "Update IIS version to 7"
    $IISVersion.Value = "7"
}

$xml.Save("c:\folder\app.config")

答案 1 :(得分:1)

如果该行始终在那里,您当然可以使用-replace。它有一个正则表达式替换,可以在这里使用:

$content = Get-Content sample.txt
if ($content -match '<add key="IIS_VERSION" value="7" />') {
  Write-Host "IIS's version is already 7"
} else {
  Write-Host "Update IIS version to 7"
  $content -replace '<add key="IIS_VERSION" value="[^"]+" />', '<add key="IIS_VERSION" value="7" />'
}

关于使用字符串替换时最简单的方法。

但是,您的文件看起来非常像XML。在这种情况下,使用XML操作实际上应该更容易,PowerShell也提供了这种操作:

$content = [xml](Get-Content sample.txt)
$iisKey = $content.SelectSingleNode("//add[@key = 'IIS_VERSION']")
if ($iisKey.value -eq 7) {
  Write-Host "IIS's version is already 7"
} else {
  Write-Host "Update IIS version to 7"
  $iisKey.value = '7'
  $content.Save((Resolve-Path sample.txt))
}

(未经测试,我不经常这样做,但应该只是那些行。)

答案 2 :(得分:0)

内容看起来像XML,因此您应该考虑使用xpath表达式来选择节点并更改值(请参阅answer from Frode F.)。但是,您也可以使用正则表达式(使用正向lookbehind来查找位置)

$txt = Get-Content sample.txt
$regex = '(?<=<add key="IIS_VERSION" value=")[^"]+'
$txt -replace $regex, 7
$txt | Set-Content sample.txt

答案 3 :(得分:0)

我现在的问题是它只更新条形码格式,如果低于7则不再更新iis版本

$ path ='C:\ Users \ hello \ Documents'

vec[(ypos * XDIM) + xpos]