我有编程背景,但对 powershell 脚本和正则表达式还相当陌生。正则表达式一直困扰着我,我之前的项目也从未“强迫”我学习它。
考虑到这一点,我有一个文件,其中有一行文本需要替换。我不能依赖于知道该行存在于哪里,它前面是否有空格,或者被替换的实际文本是什么。我确实知道被替换的文本前言和之前的内容。
再次,我不会知道“替换此文本”的价值。我只会知道它前面的内容“”和前面的内容“”。编辑OP以澄清。谢谢!
我需要替换的文本行
<find-this-text>Replace This Text</find-this-text>
潜在代码
(gc $file) | % { $_ -replace “”, “” } | sc $file
获取文件的内容,将其括在括号中以确保首先读取文件然后关闭文件,以便在尝试保存文件时不会引发错误。
迭代每一行,并发出替换语句。这是我需要帮助的地方。
使用 Set-Content 保存文件。我的理解是这种方法更好,因为它考虑了编码,比如UTF8。
XML 不是面向行的格式(节点可能跨越多行,就像一行可能包含多个节点一样),因此不应像面向行的格式一样对其进行编辑。请改用适当的 XML 解析器。
$xmlfile = 'C:\path\to\your.xml'
[xml]$xml = Get-Content $xmlfile
$node = $xml.SelectSingleNode('//find-this-text')
$node.'#text' = 'replacement text'
要将 XML 保存为“UTF-8 without BOM”格式,您可以调用Save() https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.save%28v=vs.110%29.aspx方法与StreamWriter https://stackoverflow.com/a/2437780/1630171做正确的事™:
$UTF8withoutBOM = New-Object Text.UTF8Encoding($false)
$writer = New-Object IO.StreamWriter ($xmlfile, $false, $UTF8withoutBOM)
$xml.Save($writer)
$writer.Close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)