如何在 PowerShell 中向其中一列添加单引号?

问题描述 投票:0回答:1

我的文件中有以下几行:

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'

几乎是正确的,但需要添加第二列上的第二个单勾。如何做到这一点?

powershell replace powershell-2.0 powershell-3.0 powershell-4.0
1个回答
0
投票

使用单一

-replace
操作更简洁、更高效:

Get-Content FILE | 
  Where-Object { $_ -notmatch '^--' -and $_ -match ':=' } | 
  ForEach-Object {
    $_ -replace '^(\S+) .+? := (''.+?'');.*', 'WHEN ''$1''    THEN  $2'
  }
  • 上面的regex旨在消耗整个输入字符串并使用捕获组

    (...)
    )来捕获感兴趣的子字符串。

  • 捕获组捕获的内容可以在替换表达式中引用为第一个捕获组的

    $1
    ,依此类推。

  • 由于正则表达式匹配整个输入字符串,因此它被替换表达式有效地替换。

  • 有关正则表达式和替换操作以及实验它们的选项的说明,请参阅此 regex101.com 页面(请注意,由于网站上隐含了

    "..."
    引用,因此嵌入的
    '
    字符。do 不需要需要转义为
    ''
    )。

© www.soinside.com 2019 - 2024. All rights reserved.