我有一些看起来像这样的数据:
:setvar DatabaseName "CI_1814903104"
:setvar DefaultFilePrefix "CI_1814903104"
--etc.
GO
我希望用空字符串替换所有sql cmd变量行(以:setvar开头的行),使得数据如下所示:
--etc.
GO
这句话(其中$script
包含数据)似乎可以解决问题,但仍然留下换行符:
$script -replace ":setvar(.*$)", ""
结果:
--etc.
GO
如何在比赛中加入新线?它似乎匹配它,但实际上并没有被替换。任何帮助表示赞赏。
答案 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