繁体   English   中英

如何在PowerShell中进行条件替换?

[英]How do I do a conditional replace in PowerShell?

Powershell新手寻求帮助。

我有一个powershell脚本,它可以将文本文件中的优先级值更改为50:

if ($line.contains("Priority") ) 
{
   $LastComma = $line.LastIndexOf(",") +1
   $N = $line.Substring(0,$LastComma)
   $N = $N + "50"
   $lines[$counter] = $N

} 

这可以正常工作,并且完全可以实现我想要的功能,但是我现在需要对其进行修改,以便在还存在以下行的情况下将优先级值更改为45:

Provider = XYZ

如果此提供者值不是XYZ,则所有优先级值都将像以前一样设置为50。 有人对我如何实现这一目标有任何建议吗?

谢谢

请下一次尝试提供一个有效的示例

除了提供的信息之外,这里没有其他任何信息,下面是解决方案的草案:

foreach ($line in $lines) {
  $value = "XYZ"
  $check = $false
  if ($line.contains("Provider = $value")) {
    $check = $true
  }
  if ($line.contains("Priority")) {
    if ($check) {
      $priority = 45
    } else {
      $priority = 50
    }
    $LastComma = $line.LastIndexOf(",") +1
    $N = $line.Substring(0,$LastComma)
    $N = $N + "$priority"
    $lines[$counter] = $N
  }
}

备注:假设在Priority标签之前找到Provider标签。

此示例说明了如何使用Powershell结合以下几个概念:

  1. 使用正则表达式匹配每一行

  2. 使用正则表达式替换每一行

  3. 使用switch语句

这是一个测试文件:

Set-Content test.txt "Provider=ABC,Priority=3                                                            
Provider=DEF,Priority=4
Not a provider                                                                                                                        
Provider=XYZ,Priority=5"

您可以使用switch语句逐行转换测试文件(感谢@ TheIncorrigible1)

switch -Regex -File test.txt
{                                                                                                                                        
   'Provider=XYZ.+Priority='
   {
       $_ -replace "Priority=\d+","Priority=45"
       continue
   }                                                                                                                                    

   'Priority='                                                                                                                          
   {                                                                                                                                    
       $_ -replace "Priority=\d+","Priority=50"
       continue
   }                                                                                                                                    

   default                                                                                                                              
   {                                                                                                                                    
       $_
       continue
   }                                                                                                                                    
}                                                                                                                                       

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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