繁体   English   中英

为什么此开关会删除额外的一行(PowerShell)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM