首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >切换文件中的字符串

切换文件中的字符串
EN

Stack Overflow用户
提问于 2019-02-22 03:41:57
回答 2查看 0关注 0票数 0

我需要在两个值之间的文件中更改字符串。我想要做的是,如果我找到值A然后更改为值B,如果我找到值B然后更改为值A.将会有一个消息框弹出,表示该值已更改为[xxxxx]然后背景图片将是也相应改变了。

代码语言:javascript
复制
$path = c:\work\test.xml
$A = AAAAA
$B = BBBBB
$settings = get-content $path
$settings | % { $_.replace($A, $B) } | set-content $path

我无法弄清楚如何使用IFA然后用B或IFB替换然后替换A.此外,上面的代码将删除文件中的其余内容,并仅将我修改的部分保存回文件。

EN

回答 2

Stack Overflow用户

发布于 2019-02-22 11:51:58

这没有经过广泛测试,但我认为它应该有效:

代码语言:javascript
复制
path = c:\work\test.xml
$A = 'AAAAA'
$B = 'BBBBB'

[regex]$regex = "$A|$B"

$text = 
Get-Content $path | 
foreach {
$regex.Replace($text,{if ($args[0].value -eq $A){$B} else {$A}})
}

$text | Set-Content $path

如果不确切知道数据是什么样的话,很难确定。

票数 0
EN

Stack Overflow用户

发布于 2019-02-22 13:17:28

假设$A并且$B只包含简单的字符串而不是正则表达式,您可以使用switch带有通配符匹配的语句:

代码语言:javascript
复制
$path = 'c:\work\test.xml'
$A = 'AAAAA'
$B = 'BBBBB'

(Get-Content $path) | % {
  switch -wildcard ($_) {
    "*$A*"  { $_ -replace [regex]::Escape($A), $B }
    "*$B*"  { $_ -replace [regex]::Escape($B), $A }
    default { $_ }
  }
} | Set-Content $path

[regex]::Escape()可确保其在正则表达式特殊meaing字符转义,因此该值被替换为文字字符串。

如果你的目标是更高级的东西,你可以使用带回调函数的正则表达式替换:

代码语言:javascript
复制
$path = 'c:\work\test.xml'
$A = 'AAAAA'
$B = 'BBBBB'

$rep = @{
  $A = $B
  $B = $A
}

$callback = { $rep[$args[0].Groups[1].Value] }

$re = [regex]("({0}|{1})" -f [regex]::Escape($A), [regex]::Escape($B))

(Get-Content $path) | % {
  $re.Replace($_, $callback)
} | Set-Content $path
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档