【问题标题】:Find and replace $VARIABLE$ in files with powershell使用 powershell 查找和替换文件中的 $VARIABLE$
【发布时间】:2015-10-02 21:58:38
【问题描述】:

我正在制作一个简单的 powershell 脚本来替换我们环境中的 SubWCRev。所以我有很多模板文件,其中包含$WCREV$ 等变量。

不过,我无法对这些变量进行简单的查找和替换。我无法正确转义 $ 字符。

查找和替换很简单;

function FindAndReplace {
param(
    [string]$inputFile, 
    [string]$outputFile,
    [string]$findString, 
    [string]$replaceString)
    (Get-Content $inputFile) | foreach {$_ -replace $findString, $replaceString} |
    Set-Content $outputFile
}

我已经为 $findString 尝试了许多替代方案。

试过了;

$findString = '$WCREV$'
$findString = '`$WCREV`$'
$findString = "`$WCREV`$"
$findString = "$WCREV$" 

无法让它发挥作用。如果我只尝试 WCREV 它会替换它,但是我当然会留下 $ .. 我想我可以修改我的模板,但这似乎是一个愚蠢的小问题,所以它可能是可行的,对吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您正在使用支持正则表达式的-replace$ 是那里的行尾锚。如果您不需要正则表达式,则只需使用字符串方法替换即可。

    $findString = '$WCREV$'
    (Get-Content $inputFile) | foreach {$_.replace($findString,$replaceString)}
    

    要使用您的代码制作您的原始$findString,那么您需要使用 regex 转义字符,它是 PowerShell 的反斜杠,它就像您尝试的那样是反引号。单引号对于防止 PowerShell 尝试将字符串扩展为变量很重要。以下任何一项都可以,但我的第一个 sn-p 是我的建议。

    $findString = '\$WCREV\$'
    $findString = [regex]::Escape('$WCREV$')
    

    【讨论】:

    • 太好了,谢谢! :)(我应该多读一点文档……)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    相关资源
    最近更新 更多