7

次のようなデータがあります。

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

GO

データが次のようになるように、すべての sql cmd 変数行 (:setvar で始まる行) を空の文字列に置き換えたいと考えています。

--etc.    

GO

このステートメント($scriptデータが含まれている場所)はトリックを行うようですが、それでも改行が残ります:

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

結果:

 
 
--etc.    

GO

一致に改行を含めるにはどうすればよいですか? 一致しているように見えますが、実際には交換されません。どんな助けでも感謝します。

4

1 に答える 1

13

これは、データが何らかのファイルから読み込まれていることを前提としています。データの読み取り方法によっては、単一の文字列ではなく、文字列のコレクションがある場合があります。

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 を Out-String にパイプすると、単一の文字列が取得され、Windows の改行文字を操作して適切な行を削除できます。

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

GO
于 2013-09-13T03:43:18.957 に答える