使用PowerShell脚本编辑.cfg文件

时间:2016-09-27 20:52:12

标签: powershell scripting powershell-v2.0 config computer-science

我有一个看起来像这样的.cfg文件

Block 1  
   attr_1    = 0
   attr_2    = "a"
END

Block 2
   attr_1    = 0
   attr_2    = "b"
END

Block 3
   attr_1    = 0
   attr_2    = "a"

END

如何使用powershell脚本在attr_2 =" a"?

的所有块中将attr_1的值更改为1

即。结果应如下所示:

Block 1  
   attr_1    = 1    #attr_1 is changed
   attr_2    = "a"
END

Block 2
   attr_1    = 0
   attr_2    = "b"
END

Block 3
   attr_1    = 1    #att_1 is changed 
   attr_2    = "a"

END

我知道对于XML文件,powershell可以更改每个节点的属性,但是如何使用.cfg文件完成此操作呢?我正在使用Powershell V2.0。感谢帮助!

1 个答案:

答案 0 :(得分:2)

我不太了解.CFG文件,也不了解PowerShell,但根据您的示例,您可以使用正则表达式完成工作。

# Read the file in blocks delimited by lines starting with 'END'
$blocks = Get-Content temp.cfg -Delimiter "`nEND"

# Process those blocks matching a criteria
$blocks = $blocks | ForEach-Object { 
    if ($_ -match '\battr_2\s*=\s*"a"') { 
        # replace specified attribute
        $_ = $_ -replace '\b(attr_1\s*=)\s*0\b', '$1 1'
    }
    $_
}

# Write the blocks to another file...
$blocks | set-content temp2.cfg -NoNewline

我已经编写了正则表达式,因此他们只应更改与您的示例非常匹配的部分。

P.S。我没有在PowerShell 2上仔细检查过这个工作,但我想是的。此外,根据阅读这些文件的内容,您可能需要在Set-Content上指定-Encoding Ascii(或其他内容)。