Powershell取代多线

时间:2017-01-03 19:35:47

标签: regex powershell

在Powershell中,我试图替换以下内容:

<Name>RANDOMTEXT</Name>
</Member>

使用

<Name>RANDOMTEXT</Name></Member>

我使用以下代码:

$content = [System.IO.File]::ReadAllText(<XMLFILE>).Replace("</Name>`n</Member>","</Name></Member>")
[System.IO.File]::WriteAllText(<NEWFILE>, $content)

替换不起作用。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

如果您希望能够同时处理Windows和Unix样式的换行符,我建议使用RegEx replace(-replace运算符)而不是静态字符串(方法)版本。

Windows样式是回车后跟换行符(2个字符,CRLF"`r`n"),Unix样式只是换行符(LF"`n"

使用正则表达式替换:

$content = [System.IO.File]::ReadAllText(<XMLFILE>) -replace '</Name>\r?\n</Member>','</Name></Member>'

或替换所有换行符:

$content = [System.IO.File]::ReadAllText(<XMLFILE>) -replace '\r?\n'

问号?使CR成为可选(匹配0或1),因此这将包含所有换行符。

答案 1 :(得分:1)

尝试.Replace("</Name>" + [Environment]::NewLine + "</Member>","</Name></Member>")

.Replace("</Name>`r`n</Member>","</Name></Member>")

在一般说明中,如果您只想删除新行,则只需尝试[System.IO.File]::ReadAllText(<XMLFILE>).Replace([Environment]::NewLine,"")