С оператором Replace можно использовать следующее:
$regex = [regex]::Escape('show_message(get_playlist(), 3)')
(Get-Content .\Scripts\osc.lua) -replace $regex |
Set-Content .\Scripts\osc.lua
В качестве альтернативы можно использовать метод String.Replace из класса String, который не использует регулярное выражение .
(Get-Content .\Scripts\osc.lua).Replace('show_message(get_playlist(), 3)','') |
Set-Content .\Scripts\osc.lua
Объяснение:
При использовании оператора -replace
соответствующийМеханизм - это регулярное выражение. Некоторые символы являются метасимволами для регулярных выражений и должны быть экранированы, прежде чем их можно будет интерпретировать буквально. В этом случае (
и )
необходимо экранировать. Вы можете сделать это вручную с помощью \
(\(
и \)
) или использовать метод Escape()
из класса Regex. Из приведенного выше кода вы можете набрать $regex
после его объявления и посмотреть, как оно было экранировано.
При замене строки пустой строкой вам не нужно указывать строку замены. 'String' -replace 'ing'
имеет те же результаты, что и 'String' -replace 'ing',''
Примечание: Вы смешиваете Get-Content
и Out-File
в своем коде без использования параметра -Encoding
. Возможно, вы могли бы вывести другую кодировку, чем исходный файл. Если это важно для вас, я бы предложил использовать параметр -Encoding
с соответствующей кодировкой.