在 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-Content
和 Out-File
,而没有使用 -Encoding
参数。您可能会输出与原始文件不同的编码。如果这对您很重要,我建议使用具有适当编码的 -Encoding
参数。
我制作了一个 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-Content
和 Out-File
,而没有使用 -Encoding
参数。您可能会输出与原始文件不同的编码。如果这对您很重要,我建议使用具有适当编码的 -Encoding
参数。