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

时间:2013-09-13 03:29:50

标签: regex powershell

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

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

GO

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

--etc.    

GO

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

$script -replace ":setvar(.*$)", ""

结果:

 
 
--etc.    

GO

如何在比赛中加入新线?它似乎匹配它,但实际上并没有被替换。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分: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

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

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

GO