小编fir*_*ood的帖子

PowerShell - 替换旧的,新的 - 可以进行多次替换吗?

我需要使用 PowerShell 5.1 读取文件、对其进行编辑,并将结果写入另一个文件。我一直在研究/sf/ask/3187831111/,并且已经能够将那里的信息调整为接近我想要的内容,目前是下列:

PowerShell -ExecutionPolicy Bypass -Command "(Get-Content $$source_file -Raw) -replace 'AAA','BBB' | Out-File -filepath output_file"
Run Code Online (Sandbox Code Playgroud)

这可行,但我有两个问题尚未找到答案:

  1. 因为上面的指令是 Makefile 中配方的一部分,必须使用 cmd.exe 作为其 shell(否则我只使用 sed),所以我需要按原样表述该指令,即将实际的 PowerShell 命令传递为两个双引号之间的字符串。在 -replace 参数的值周围使用单引号是可行的,但在现实生活中,我需要传递变量,因此我必须使用双引号,以便可以扩展变量引用。我在其他地方读到,在 powershell 指令中包含双引号只是为了连续使用两个双引号,但是当我这样做时,我收到一条错误消息,指出我必须在运算符后面使用值表达式-replace

这是不起作用的版本:

PowerShell -ExecutionPolicy Bypass -Command "(Get-Content $$source_file -Raw) -replace ""AAA"",""BBB"" | Out-File -filepath output_file"
Run Code Online (Sandbox Code Playgroud)

所以我的第一个问题是,如何在值表达式中包含变量名,使其能够扩展到其实际值?

我的第二个问题是,我需要对文件进行多次编辑。由于该-replace运算符似乎与 Get-Content commandlet 相关,因此我尝试了以下操作:

PowerShell -ExecutionPolicy Bypass -Command "(Get-Content $$source_file -Raw) -replace 'AAA','BBB' -replace 'CCC','DDD' | Out-File -filepath output_file"
Run Code Online (Sandbox Code Playgroud)

第二个表达式的存在-replace引发了错误异常。因此,如果我需要在最终版本写回文件系统之前对源文件进行多次编辑,除了再次通过新的 Get-Content 管道发送整个文件之外,是否有一种简单的方法可以做到这一点每次编辑?

谢谢。

powershell

4
推荐指数
1
解决办法
3万
查看次数

标签 统计

powershell ×1