如何用PowerShell替换文件中的每个字符串?
使用PowerShell,我想替换的所有确切的出现[MYID]
在与给定文件MyValue
。 最简单的方法是什么?
使用(V3版):
(Get-Content c:temptest.txt).replace('[MYID]', 'MyValue') | Set-Content c:temptest.txt
或者对于V2:
(Get-Content c:temptest.txt) -replace '[MYID]', 'MyValue' | Set-Content c:temptest.txt
(Get-Content file.txt) |
Foreach-Object {$_ -replace '[MYID]','MyValue'} |
Out-File file.txt
请注意(Get-Content file.txt)
周围的括号是必需的:
如果没有括号,内容会一次读取一行,然后沿管道流动,直到它到达out-file或set-content,它会尝试写入同一个文件,但它已被get-content打开,并且您可以获得一个错误。 括号使内容读取操作执行一次(打开,读取和关闭)。 只有在所有行都被读取后,才会一次一个地传送它们,当它们到达管道中的最后一个命令时,它们可以写入文件。 它与$ content = content相同; $ content | 哪里...
我更喜欢使用.NET的File-class及其静态方法,如以下示例所示。
$content = [System.IO.File]::ReadAllText("c:bla.txt").Replace("[MYID]","MyValue")
[System.IO.File]::WriteAllText("c:bla.txt", $content)
与Get-Content一样,这具有使用单个字符串而不是字符串数组的优点。 这些方法还可以处理文件的编码(UTF-8 BOM等),而无需在大部分时间关注。
此外,这些方法不会混淆行结尾(可能使用的Unix行结尾),而与使用Get-Content和通过Set-Content进行配对的算法相反。
所以对我来说:这些年来可以打破的东西更少。
使用.NET类的一个鲜为人知的事情是,当您在PowerShell窗口中键入“[System.IO.File] ::”时,可以按Tab键逐步浏览那里的方法。
链接地址: http://www.djcxy.com/p/4953.html上一篇: How can I replace every occurrence of a String in a file with PowerShell?