Powershell用双引号和新行替换

Posted

技术标签:

【中文标题】Powershell用双引号和新行替换【英文标题】:Powershell replace with double quotes and new line 【发布时间】:2021-04-29 18:03:43 【问题描述】:

我想用双引号替换一些东西,但中间还需要一个新行。 我怎样才能做到这一点?我尝试了所有组合,但在我看来,新行需要双引号,还有其他方法吗?

例如:

(Get-Content '.\input.xml') -replace 'version="1.0">', 'version="1.0"> "`n `n" iNeedANewLineHere' | Set-Content -encoding UTF8 '.\output.xml'

这样它不会将 nl-commands 解释为新行,而是将所有内容打印为文本,因为单引号......还有其他方法可以解决这个问题吗?

【问题讨论】:

我不确定问题是什么,但是powershell可以重新格式化一个xml文件并根据其中的标签重新编码:[xml]$xml = type file.xml; $xml.save("$pwd\file.xml") 【参考方案1】:

使用双引号将您的字符串括起来,并像这样转义内部双引号:

(Get-Content '.\input.xml') -replace 'version="1.0">', "version=`"1.0`"> `"`n `n`" iNeedANewLineHere" | Set-Content -encoding UTF8 '.\output.xml'

或者像这样:

(Get-Content '.\input.xml') -replace 'version="1.0">', "version=""1.0""> ""`n `n"" iNeedANewLineHere" | Set-Content -encoding UTF8 '.\output.xml'

如果您从 CMD 执行此操作,则需要在传递时转义您尝试在 CMD 中传递给 PowerShell 的任何内部双引号。这应该这样做:

powershell -Command "(Get-Content '.\input.xml') -replace 'version=^"1.0^">', ^"version=^"^"1.0^"^"> `n `n iNeedANewLineHere^" | Set-Content -encoding UTF8 '.\output.xml'"

【讨论】:

非常感谢!太容易了;我有两个双引号太多了,但这是我需要的版本(Get-Content '.\input.xml') -replace 'version="1.0">', "version=""1.0""> `n `n iNeedANewLineHere" | Set-Content -encoding UTF8 '.\output.xml' 单引号比双引号得到更高的解释,对吧?有没有比单引号解释得更高的东西,我猜这是解决方案 [使它更加复杂,我知道,你的方式是最好的方式 (; ] 我不确定更高的解释是什么意思,抱歉。希望the official docs可以回答你的问题。 我的意思是单引号的更高级别(重要性?)。真诚地它不能在 CMD shell 中运行,它在 powershell 中运行完美,但我需要在 CMD shell 中运行它。经过测试,在我看来,它需要单引号,但是我该怎么做一个 NewLine 呢? powershell -Command "(gc 'C:\Users\Administrator\Desktop\input.xml') -replace 'test', '"`n"success' | Set-Content -encoding UTF8 'C:\Users\Administrator\Desktop\output.xml'这样子不行…… 我已更新答案以解决您的 CMD 问题。 对不起,但仍然不起作用...我收到命令写入错误的错误。 powershell -Command "(Get-Content '.\input.xml') -replace 'version=^"1.0"^>', ... 我没有收到这样的错误,但是在单引号中它被 shell 解释为字符串,所以现在它正在搜索 version=^"1.0"^> 这是错误的...... :(

以上是关于Powershell用双引号和新行替换的主要内容,如果未能解决你的问题,请参考以下文章

如何使用`sed`替换用双引号括住目录的单引号

sql语句中啥时候用单引号啥时候用双引号?如图中的红为啥用双引号?

用其他东西替换或删除新行,但只能在 CSV 文件上使用 PHP 的单引号或双引号之间

在Javascript中显示带有引号和换行符的PHP字符串(警报)[重复]

如何使用powershell将文本($)替换为文本文件中的引号

vue 替换字符串里的字符