gpt4 book ai didi

powershell - 在保留输入大小写的情况下,如何用不区分大小写的匹配替换PowerShell中的字符串

转载 作者:行者123 更新时间:2023-12-02 23:37:46 25 4
gpt4 key购买 nike

我想从文件中替换多个字符串。如果字符串是大写字母,则替换为大写字母。如果是小写字母,请用小写字母替换。

到目前为止,我的代码如下所示。它确实会替换,但不会按情况进行替换。

(Get-Content $xyx -ErrorAction Stop) | Foreach-Object {
$_ -replace 'abc001', 'abc002' -replace 'cde001', 'cde002'
} | Set-Content $xyz

有时我要替换的字符串是大写的。因此,我需要介绍一下是否用大写字母代替小写字母的情况。

怎么写这段代码?

编者注:首次发布此问题时,在替换字符串中保留原始大小写时不区分大小写的匹配要求并不明显-在发布了一些答案之后,标题进行了修改。

最佳答案

听起来您正在寻找的是替换操作,该操作在匹配时不区分大小写,但在替换时保留大小写。

您没有指定要匹配的字符串之间以及替换字符串之间的确切关系,而是通过示例命令进行操作:

(Get-Content $xyx -ErrorAction Stop) -replace '(abc00)1', '${1}2' -replace 
'(cde00)1', '${1}2' | Set-Content $xyz

注意:通过手头的特定替换,可以将它们组合为一个操作: ... -replace '(abc00|cde00)1', '${1}2'
  • 假定-regex默认情况下不区分大小写,它将匹配abccde的所有大小写变体,但在第一个(也是唯一一个)捕获组((...))中捕获它们的原始大小写,在替换中可将其称为${1}操作数(如果没有歧义,则只是$1)。
  • 还请注意我如何省略了ForEach-Cmdlet调用,因为您可以将-replace直接应用于(Get-Content ...)返回的行数组;对于已经完全存储在内存中的阵列,此方法不仅更短,而且明显更快。

  • 举一个简单的例子:
    PS> 'aBc001' -replace '(abc00)1', '${1}2'
    aBc002 # input case was preserved

    关于powershell - 在保留输入大小写的情况下,如何用不区分大小写的匹配替换PowerShell中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50927747/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com