在 PowerShell 脚本中编辑文本文件

Editing a text file inside PowerShell Script

我制作了一个 Powershell 脚本来更新我的 mpv 脚本。其中之一就是这个 https://raw.githubusercontent.com/mpv-player/mpv/master/player/lua/osc.lua 我希望脚本从文件中编辑和删除 show_message(get_playlist(), 3) 的所有实例。

我尝试了 (get-content .\Scripts\osc.lua) | foreach-object {$_ -replace "show_message(get_playlist(), 3)", ""} | Out-File .\Scripts\osc.lua(get-content .\portable_config\Scripts\osc.lua) | foreach-object {String.Replace [RegEx]::Escape('show_message(get_playlist(), 3)'),''} | Out-File .\portable_config\Scripts\osc.lua,但它们似乎不起作用。

基本上我希望脚本自动下载 osc.lua(按预期工作正常),然后从文件中删除 show_message(get_playlist(), 3) 的所有实例。我的 PowerShell 版本是 5.1.

您可以将以下内容与 Replace Operator 一起使用:

$regex = [regex]::Escape('show_message(get_playlist(), 3)')
(Get-Content .\Scripts\osc.lua) -replace $regex |
    Set-Content .\Scripts\osc.lua

或者,您可以使用字符串 class 中的 String.Replace 方法,它 不使用正则表达式 .

(Get-Content .\Scripts\osc.lua).Replace('show_message(get_playlist(), 3)','') |
    Set-Content .\Scripts\osc.lua

解释:

使用-replace运算符时,匹配机制是正则表达式匹配。某些字符是正则表达式的元字符,必须先转义才能按字面解释。在这种情况下 () 需要转义。您可以使用 \\(\))手动执行此操作,也可以使用正则表达式 class 中的 Escape() 方法。从上面的代码中,您可以在其声明后键入 $regex 并查看它是如何转义的。

用空字符串替换字符串时,不需要指定替换字符串。 'String' -replace 'ing''String' -replace 'ing',''

的结果相同

注意: 您在代码中混合了 Get-ContentOut-File,而没有使用 -Encoding 参数。您可能会输出与原始文件不同的编码。如果这对您很重要,我建议使用具有适当编码的 -Encoding 参数。