我制作了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。
答案 0 :(得分:0)
您可以在Replace Operator中使用以下内容:
$regex = [regex]::Escape('show_message(get_playlist(), 3)')
(Get-Content .\Scripts\osc.lua) -replace $regex |
Set-Content .\Scripts\osc.lua
或者,您可以使用String类中的String.Replace方法, 不使用正则表达式 。
(Get-Content .\Scripts\osc.lua).Replace('show_message(get_playlist(), 3)','') |
Set-Content .\Scripts\osc.lua
说明:
使用-replace
运算符时,匹配机制是正则表达式匹配。某些字符是正则表达式的元字符,必须先转义才能对它们进行字面解释。在这种情况下,(
和)
需要转义。您可以使用\
(\(
和\)
)手动执行此操作,也可以使用Regex类中的Escape()
方法。从上面的代码中,您可以在声明后键入$regex
,并查看它是如何转义的。
用空字符串替换字符串时,无需指定替换字符串。 'String' -replace 'ing'
与'String' -replace 'ing',''
注意:您在代码中混合使用Get-Content
和Out-File
而不使用-Encoding
参数。您可能会输出与原始文件不同的编码。如果这对您很重要,建议您使用带有适当编码的-Encoding
参数。