[英]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结合以下几个概念:
使用正则表达式匹配每一行
使用正则表达式替换每一行
使用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.