Regex 将正则表达式中的换行符与powershell匹配
我有一些数据如下所示:Regex 将正则表达式中的换行符与powershell匹配,regex,powershell,Regex,Powershell,我有一些数据如下所示: :setvar DatabaseName "CI_1814903104" :setvar DefaultFilePrefix "CI_1814903104" --etc. GO --etc. GO 我希望将所有sql cmd变量行(以:setvar开头的行)替换为空字符串,以便数据如下所示: :setvar DatabaseName "CI_1814903104" :setvar DefaultFilePrefix "CI_1814903104"
:setvar DatabaseName "CI_1814903104"
:setvar DefaultFilePrefix "CI_1814903104"
--etc.
GO
--etc.
GO
我希望将所有sql cmd变量行(以:setvar开头的行)替换为空字符串,以便数据如下所示:
:setvar DatabaseName "CI_1814903104"
:setvar DefaultFilePrefix "CI_1814903104"
--etc.
GO
--etc.
GO
此语句(其中$script
包含数据)似乎起到了作用,但仍然保留了换行符:
$script -replace ":setvar(.*$)", ""
结果:
--etc.
GO
我如何在比赛中加入新线?它似乎与之匹配,但实际上并未被替换。非常感谢您的帮助。这假设您的数据是从某个文件读取的。根据您读取数据的方式,您可能有一个字符串集合而不是单个字符串
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
如下所示,通过管道将内容输出到字符串将确保获得单个字符串,然后可以对windows换行符进行操作以删除相应的行
PS <C:\> $script = ( Get-Content data.txt | Out-String ).Trim()
PS <C:\> $script -replace ":setvar(.*)`n", ""
--etc.
GO
PS$script=(Get Content data.txt | Out String).Trim()
PS$script-replace“:setvar(.*)`n”
--等等。
去
感谢您在字里行间的阅读-是gc作为一个数组把我搞砸了。另外,将r
n更改为\r\n,您将获得分数@普利茅斯223 Powershell中的转义字符是backtick。对于使用正则表达式的这种情况,这两种方法都有效——但通常情况并非如此。试试看。:)啊,明白了-我的问题是我尝试了你的,但它不起作用,所以我将表达式改为“:setvar(.*)\n”,它成功了。该文件仅包含换行符的\n。谢谢,明白了。这是我的坏假设windows马车返回。更有趣的是,这个表达式无论如何都应该抓住\r
,所以保留它没有多大意义——我将为此编辑这篇文章。