我有一个看起来像这样的.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。感谢帮助!
答案 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
(或其他内容)。