【问题标题】:Get-Content: new line获取内容:新行
【发布时间】:2016-10-30 18:18:08
【问题描述】:

我有一个脚本:

(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>

有什么想法吗?

【问题讨论】:

  • ('VALUE', 'MY_VALUE\n') 也许?
  • 能否提供test.xml文件?
  • 嗨,我在 Invoke-WebRequest 一行 TESTTEST_1 后得到了结果,但我需要在替换标签名称后才能完成两行
  • 仍然,提供test.xml,向我们展示您想要替换的内容以及您期望的输出。然后我们可以帮助您。
  • 不能直接忽略第二行代码吗?将 VALUE 替换为 MY_VALUE 适用于 VALUE 和 VALUE_01。您正在尝试替换已替换的内容。

标签: powershell powershell-4.0


【解决方案1】:

看来我找到了解决办法:

(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

【讨论】:

    【解决方案2】:

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

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

    我相信,更好的答案是让 powershell 将 xml 视为 xml 并使用保存方法 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)
    

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

    【讨论】:

      猜你喜欢
      • 2021-02-20
      • 1970-01-01
      • 2016-10-10
      • 2019-10-16
      • 1970-01-01
      • 2019-06-06
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多