khv*_*hvn 3 powershell replace hashtable
好的,所以我设置了一个哈希表,其名称是要替换的,键是要替换的,如下所示:
$r = @{
"dog" = "canine";
"cat" = "feline";
"eric" = "eric cartman"
}
Run Code Online (Sandbox Code Playgroud)
接下来我该怎么办?我试过这个:
(Get-Content C:\scripts\test.txt) | Foreach-Object {
foreach ( $e in $r.GetEnumerator() ) {
$_ -replace $e.Name, $e.Value
}
} | Set-Content C:\scripts\test.txt.out
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用,只是将每行写入三次,而不更换任何东西.
编辑:包含test.txt:
dog
cat
eric
Run Code Online (Sandbox Code Playgroud)
test.txt.out:
dog
dog
dog
cat
cat
cat
eric
eric
eric
Run Code Online (Sandbox Code Playgroud)
这是一种方法:
$file = Get-Content C:\scripts\test.txt
foreach ($e in $r) {
$file = $file -replace $e.Name, $e.Value
}
Set-Content -Path C:\scripts\test.txt.out -Value $file
Run Code Online (Sandbox Code Playgroud)
你看到每一行三次的原因是由于嵌套的foreach循环.对于文件中的每一行,每个哈希表条目运行一次替换操作.这不会更改源文件,但默认情况下它会输出替换的结果(即使没有更改).
您可以先将文件读入变量,然后使用循环替换来更新该变量,从而获得所需的功能.您也不需要为文件内容单独的foreach循环; 每个哈希表条目的一次传递中,替换可以针对全文运行.
归档时间: |
|
查看次数: |
8277 次 |
最近记录: |