使用PowerShell匹配正则表达式中的换行符

Ply*_*223 3 regex powershell

我有一些看起来像这样的数据:

:setvar DatabaseName "CI_1814903104"
:setvar DefaultFilePrefix "CI_1814903104"
--etc.    

GO
Run Code Online (Sandbox Code Playgroud)

我希望用空字符串替换所有sql cmd变量行(以:setvar开头的行),使得数据如下所示:

--etc.    

GO
Run Code Online (Sandbox Code Playgroud)

这句话($script包含数据)似乎可以解决问题,但仍然留下新行:

$script -replace ":setvar(.*$)", ""
Run Code Online (Sandbox Code Playgroud)

结果是:

 
 
--etc.    

GO
Run Code Online (Sandbox Code Playgroud)

如何在比赛中包含换行符?它似乎匹配它,但实际上并没有被替换.任何帮助赞赏.

Ant*_*ace 9

这假设您正在从某个文件读入数据.根据您在数据中的读取方式,您可能拥有一组字符串而不是一个字符串.

PS C:\> $script = Get-Content data.txt

# Get-Content returns each line as a string object in an Object[].
PS C:\> $script.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS C:\> $script[0].GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object
Run Code Online (Sandbox Code Playgroud)

如下所示,将Get-Content管道到Out-String将确保您获得单个字符串,然后您可以操作Windows换行符以删除相应的行.

PS <C:\> $script = ( Get-Content data.txt | Out-String ).Trim()
PS <C:\> $script -replace ":setvar(.*)`n", ""
--etc.

GO
Run Code Online (Sandbox Code Playgroud)