获取内容:新行

问题描述 投票:0回答:2

我有一个脚本:

(Get-Content .\test.xml).replace('VALUE', 'MY_VALUE') | Set-Content .\test.xml
(Get-Content .\test.xml).replace('VALUE_01', 'MY_VALUE_01') | Set-Content .\test.xml

当我在文件中看到结果时:

MY_VALUEMY_VALUE_01

是否有可能使新的行像这样:

MY_VALUE
MY_VALUE_01

XML:

<VALUE>TEST</VALUE><VALUE_01>TEST_1</VALUE_01>

有任何想法吗?

powershell powershell-v4.0
2个回答
1
投票

在将xml写入文件时尝试获取回车时发现这一点。我想我会添加我的解决方案以防其他人在这里寻找这个答案。

到目前为止唯一的答案并不理想,因为它会在标记本身中添加额外的字符,如果将xml数据用于其他任何内容,可能会产生意想不到的后果。

我相信,更好的答案是让powershell将xml视为xml并使用save方法公开xml对象。 save方法编写格式良好的xml。

$fileContents = [xml]((Get-Content .\test.xml) -replace "VALUE","VALUE01" )
$fileContents.save(.\test.xml)

如果你想在保存文件之前进行双重替换,它看起来很麻烦,但实质上只是添加另一个-replace和一对周围的括号。

$fileContents = [xml](((Get-Content .\test.xml) -replace "VALUE1","VALUE01" ) -replace "VALUE2","VALUE02")
$fileContents.save(.\test.xml)

如果你想把它作为一个衬里,它可能看起来像这样,第二个替换被删除了易读性和线长。

([xml]((Get-Content .\test.xml) -replace "VALUE","VALUE01" )).save(.\test.xml)

我个人认为,当它开始变得复杂以便于阅读和修改时,使用多行更好。


0
投票

我似乎找到了解决方案:

(get-content .\test.xml) -replace 'VALUE',"`nVALUE_01" | set-content .\test.xml
(get-content .\test.xml) -replace 'VALUE_01',"`nMY_VALUE_01" | set-content .\test.xml
© www.soinside.com 2019 - 2024. All rights reserved.