PowerShell 2.0命令等效于PowerShell 3.0 Get-Content -Raw

时间:2018-01-17 09:36:54

标签: powershell powershell-v2.0

我目前正在编写一个代码片段,将AS3文件转换为JS。 以下是我的剧本。

$source = "sample.as"
$dest = "modifiedScript.js"
$raw1 = Get-Content -Path $source | Out-String
$raw1 -replace "extends.*?({)", '{' | Set-Content $dest

Sample.as

class EquivalentFraction extends MainClass 
{

    // other codes
    function f1(){

    }
}

我正在尝试获得这样的输出(将extends{之间的任何内容替换为{):

class EquivalentFraction
{
    // other codes
    function f1(){

    }
}

如果下一行中有左括号,则上述代码不起作用。 当我使用PowerShell 2.0时,我无法使用Get-Content -Raw来获取没有行的内容。 搜索后,我发现我必须使用Out-String代替-Raw切换。 但它没有用。

1 个答案:

答案 0 :(得分:3)

Get-Content -Raw的PowerShell v2等效项为Get-Content | Out-String。您的代码没有按预期执行操作的原因与数据导入无关。

由于您正在使用的正则表达式,您无法获得预期的结果。 .匹配任何单个字符除了换行符。由于您的数据在之后的行上带有extends关键字的行的大括号括号,因此您在extends{之间有换行符,这意味着{ {1}}永远不会匹配。

您可以使用extends.*?({)(匹配任何空格和任何非空格)来解决此问题

[\s\S]

或使用“单行模式”选项(使$raw1 -replace 'extends[\s\S]*?{', '{' 也匹配换行符)

.