首页 > 解决方案 > PowersShell 大写替换

问题描述

好的...经过 99 种不同的组合...

我想将数千个文件中所有出现的 EnumMessage.something 替换为 EnumMessage.SOMETHING 所以第二个单词大写。它可以是独立的,也可以是一个点或一个 (

$output = 'EnumMessage.test(something) and EnumMessage.Tezt andz EnumMessage.ALREAdY. ' -creplace 'EnumMessage\.(\w+)', 'EnumMessage.$1.ToUpper()'
$output

所以上面将函数 Upper 放在那里(单词),但它没有放在第二个单词的上方。

标签: powershellreplace

解决方案


在 PowerShell 6 及更高版本中,-replace运算符还接受执行替换的脚本块。脚本块为每个匹配运行一次。

在 PowerShell 5 中,应用Regex.ReplaceMethod

$string  = 'EnumMessage.test(something) and EnumMessage.Tezt andz EnumMessage.ALREAdY. '
$pattern = '(?<=EnumMessage\.)(\w+)'
#           (?<=EnumMessage\.)               = positive lookbehind
if ( $PSVersionTable.PSVersion.Major -ge 6 ) {
    $string -replace $pattern, { $_.Value.ToUpper() }
} else {
    [regex]::Replace( $string, $pattern, { $args.Value.ToUpper() } )
}

推荐阅读