regex - 使用powershell和regexp替换整行文本?

标签 regex powershell

我有编程背景,但我对 powershell 脚本和正则表达式都很陌生。 Regexp 一直让我望而却步,我之前的项目从未“强制”我学习它。

考虑到这一点,我有一个文件,其中包含一行需要替换的文本。我不能依赖于知道该行的位置,它前面是否有空格,或者被替换的实际文本是什么。我知道将要替换的文本的序言和之前的内容。

再次,我不会知道“替换此文本”的值(value)。我只会知道它的前言“”和它之前的“”。编辑 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 保存为“无 BOM 的 UTF-8”格式,您可以调用 Save() 带有 StreamWriter 的方法做正确的事™:
    $UTF8withoutBOM = New-Object Text.UTF8Encoding($false)
    $writer = New-Object IO.StreamWriter ($xmlfile, $false, $UTF8withoutBOM)
    $xml.Save($writer)
    $writer.Close()
    

    关于regex - 使用powershell和regexp替换整行文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30263775/

    相关文章:

    Azure 自动化 Runbook 无法完成且没有错误

    python - 用正则表达式插入字符

    Python 正则表达式匹配鞋码

    Python 正则表达式字符串转义为 re.sub 替换参数?

    python - 正则表达式 解析电子邮件 Python

    date - Powershell Win32Reg_AddRemovePrograms获取日期输出

    powershell - 为什么枚举后比较运算符不起作用?

    Powershell 无法从标准输入运行多行命令?

    c# - 编辑taglib-sharp(音频元数据)的源代码

    regex - 用 sed 区分大小写替换已知单词