我在 Perl 中无数次使用过这种东西:
for ( $someVariable ) {
s/findthis/replaceitwiththis/g;
s/findthat/replaceitwithsomethingelse/g;
}
$someVariable
的值暂时在$_
中,变量“就地”更新;每个新的替换命令都会继续更新/覆盖变量的内容。这是在一个简单的循环中完成大量更改的方便而紧凑的方法。
Powershell 是否具有“for”的等效用法?
在 @neolisk 的回复后添加评论,以便我可以使用格式。
$s = 'abcde'
$s | foreach {
$_ -replace 'a','x'
$_ -replace 'e','z'
}
write-host "And: $s"
屏幕上显示的结果:
xbcde
abcdz
And: abcde
还尝试了 $_ = $_ -replace 'a','x'
等等。这里必须有一些额外的语法才能获得“就地”替换......
根据@Nacht 的回复进一步编辑。这行得通,尽管我对反引号并不着迷:
$s = 'now is the time for all good individuals blah blah'
Write-Host $s
$s = $s `
-replace "now", 'NEVER' `
-replace 'time', 'moment' `
-replace "blah\s+blah", '-- oh, WHATEVER'
Write-Host $s
输出:
now is the time for all good individuals blah blah
NEVER is the moment for all good individuals -- oh, WHATEVER
最佳答案
在Powershell中就是这样,只是语法略有不同:
$someVariable | foreach {
Write-Host $_;
}
如果您想就地替换,请记住 $_
是不可变的,即只读的。正确的方法是在管道上输出新字符串并收集到另一个变量中,因此对于您的示例,它可能如下所示:
$s = 'abcde'
$newS = $s | foreach {
$_ -replace 'a','x' -replace 'e','z'
}
write-host "And: $newS";
关于Powershell:相当于 Perl 的 'for' 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354825/