我的文件中有以下几行:
pc_cc_text$fx_review1 CONSTANT VARCHAR2(100) := 'For Company Review'; -- AD_PRT_AUTH_(MSP)
pc_cc_text$fx_review2 CONSTANT VARCHAR2(100) := 'For Dept Review'; -- AD_PRT_AUTH_(ADX)
我需要将它们格式化如下:
WHEN 'pc_cc_text$fx_review1' THEN 'For Company Review'
WHEN 'pc_cc_text$fx_review2' THEN 'For Dept Review'
如何在 PowerShell 中执行此操作?
这是我迄今为止尝试过的:
(Get-Content FILE | where {$_ -match ':='} | where {$_ -notmatch '^--'} | ForEach-Object{("'" + $_ -split ";|--")[0,1] -join ''}) -replace 'CONSTANT[^ ]' -replace 'VARCHAR2[^ ]' -replace ':=', 'THEN ' -replace '^', 'WHEN '
打印:
WHEN 'pc_cc_text$fx_review1 THEN 'For Company Review'
WHEN 'pc_cc_text$fx_review2 THEN 'For Dept Review'
几乎是正确的,但需要添加第二列上的第二个单勾。如何做到这一点?
-replace
操作更简洁、更高效:
Get-Content FILE |
Where-Object { $_ -notmatch '^--' -and $_ -match ':=' } |
ForEach-Object {
$_ -replace '^(\S+) .+? := (''.+?'');.*', 'WHEN ''$1'' THEN $2'
}
上面的regex旨在消耗整个输入字符串并使用捕获组(
(...)
)来捕获感兴趣的子字符串。
捕获组捕获的内容可以在替换表达式中引用为第一个捕获组的
$1
,依此类推。
由于正则表达式匹配整个输入字符串,因此它被替换表达式有效地替换。
有关正则表达式和替换操作以及实验它们的选项的说明,请参阅此 regex101.com 页面(请注意,由于网站上隐含了
"..."
引用,因此嵌入的 '
字符。do 不需要需要转义为''
)。