7

我使用下面的管道读取文件并替换其中的一行并将其保存到另一个文件,但发现目标文件中的字符串没有被替换,它仍然是旧的。

原行是:name-1a2b3c4d

新行应该是:name-6a5e4r3h

(Get-Content "test1.xml") | ForEach-Object {$_ -replace '^name-.*$', "name-6a5e4r3h"} | Set-Content "test2.xml"

那里有什么遗漏吗?

4

2 回答 2

13

您缺少的一件事是 -replace 运算符在数组上工作得很好,这意味着您根本不需要那个 foreach-object 循环:

(Get-Content "test1.xml") -replace '^name-.*$', 'name-6a5e4r3h' | Set-Content test2.xml
于 2013-03-08T11:32:06.193 回答
1

您没有更改 $_ 变量。

你可以试试:

$lines = Get-Content $file
$len = $lines.count
for($i=0;$i-lt$len;$i++){
    $lines[$i] = $lines[$i] -replace $bad, $good
}
$lines > $outfile
于 2013-03-08T09:19:27.723 回答