[英]Powershell with Switch and Regex - Replace substring based on next line
[英]Why is this switch deleting an extra line (PowerShell)
此代码应该找到带有正则表达式的行并将该行替换为“test”。 它正在找到该行并将其替换为“test”,但也会删除它下面的行,无论下一行是什么。 我觉得我只是错过了关于 PowerShell 中的开关如何工作的一些信息。
注意:这是超级简化的代码。 这是一个更大的计划的一部分。
$reg = '^HI\*BH'
$appendText = ''
$file = Get-ChildItem (join-path $PSScriptRoot "a.txt.BAK")
foreach ($f in $file){
switch -regex -file $f {
$reg
{
$appendText = "test"
}
default {
If ($appendText -eq '') {$appendText = $_}
$appendText
$appendText = ''
}
}
}
a.txt.BAK
HI*BH>00>D8>0*BH>00>D8>0*BH>A1>D8>0*BH>B1>D8>0000000~
HI*BE>02>>>0.00*BE>00>>>0.00~
NM1*71*1*TTT*NAME****XX*0000000~
PRV*AT*PXC*000V00000X~
Output:
test
NM1*71*1*TTT*NAME****XX*0000000~
PRV*AT*PXC*000V00000X~
该开关没有“删除”任何东西 - 但您明确要求它在匹配时覆盖$appendText
,并且您只在 output (并重置$appendText
的值时没有)。
此代码应该找到带有正则表达式的行并将该行替换为“test”。
在这种情况下,我建议您简化switch
:
switch -regex -file $f {
$reg {
"test"
}
default {
$_
}
}
就是这样 - 不用摆弄变量 - 只需 output “测试”匹配,否则 output 线原样。
如果您坚持使用中间变量,则需要 output + 重置两种情况下的值:
switch -regex -file $f {
$reg {
$appendText = "test"
$appendText
$appendText = ''
}
default {
$appendText = $_
$appendText
$appendText = ''
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.