我有一个文本文件,其中包含${key}
形式的哈希表的一些键。我需要解析文本文件并将${key}
替换为它的值。以下是我正在使用的代码
#$config is the hashtable
$document = Get-Content sample.txt
foreach ($conf in $config.Keys) {
[string]$match = '${' + $conf + '}'
$document = $document.Replace($match, $($config.$conf))
}
}
我已尝试过以下$match
字符串
[string]$match = "`${" + $conf + "}"
[string]$match='${'
$match+=$conf
$match+='}'
我甚至尝试将字符串硬编码为$match='${BACKUP_FOLDER}'
,但在所有情况下它都没有做任何事情。我也试过-match
看看是否匹配,但它总是返回false。
我已确认文本文件包含几种${key}
格式的模式,如果我复制$match
的输出并在文件中搜索,我可以找到模式。你能指出一下是什么错吗?我正在使用Powershell V5.0
示例输入
$config=@{"BACKUP_DIR"="_Backup";"STAGING_DIR"="_Staging"}
sample.txt的内容
Overwrites the contents of new installation with old installation
Always use / as path seperator-->
<!-- <rename path="" newName=""/> -->
<!--
${BACKUP_DIR}
rename-> rename file/directory in new installation
输出:${BACKUP_DIR}
应替换为_Backup
答案 0 :(得分:1)
看起来哈希表中有几个拼写错误。以下是一个完整的解决方案,您可以将其保存为脚本并运行或复制到控制台。
$document = @'
Overwrites the contents of new installation with old installation
Always use / as path seperator-->
<!-- <rename path="" newName=""/> -->
<!--
${BACKUP_FOLDER}
rename-> rename file/directory in new installation
'@
$config=@{"BACKUP_FOLDER"="_Backup";"STAGING_DIR"="_Staging"}
Write-Output "`n`nINPUT`n$document"
foreach ($conf in $config.Keys) {
[string]$match = '${' + $conf + '}'
$document = $document.Replace($match, $config.$conf)
}
Write-Output "`n`nOUTPUT`n$document"