我正在开发一个powershell脚本,我有几个文本文件,我需要在符合此模式的行中替换反斜杠:.. >\\%name% .. < ..
(..
可以是任何东西)
反斜杠应匹配的其中一个文件的示例字符串:
<Tag>\\%name%\TST$\Program\1.0\000\Program.msi</Tag>
反斜杠不应匹配的其中一个文件的示例字符串:
<Tag>/i /L*V "%TST%\filename.log" /quiet /norestart</Tag>
到目前为止,我已设法使用此表达式Regex101选择>\\%name%
和<
之间的每个字符:
(?<=>\\\\%name%)(.*)(?=<)
但我没有选择反斜杠。
有没有找不到的解决方案?
答案 0 :(得分:2)
我建议您使用XPath expression选择相关标签,然后在所选节点的文本正文中进行替换。
$xml.SelectNodes('//Tag[substring(., 1, 8) = "\\%name%"]' | ForEach-Object {
$_.'#text' = $_.'#text' -replace '\\', '\\'
}
答案 1 :(得分:0)
所以这是我的解决方案:
$original_file = $Filepath
$destination_file = $Filepath + ".new"
Get-Content -Path $original_file | ForEach-Object {
$line = $_
if ($line -match '(?<=>\\\\%name%)(.*)(?=<)'){
$line = $line -replace '\\','/'
}
$line
} | Set-Content -Path $destination_file
Remove-Item $original_file
Rename-Item $destination_file.ToString() $original_file.ToString()
因此,对于给定模式中的/,这将replace每个\,但不是我的问题的方式。