在PowerShell脚本中编辑文本文件

时间:2019-11-02 20:24:20

标签: powershell powershell-5.0

我制作了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。

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-ContentOut-File而不使用-Encoding参数。您可能会输出与原始文件不同的编码。如果这对您很重要,建议您使用带有适当编码的-Encoding参数。