2013-09-13 1 views
2

У меня есть некоторые данные, которые выглядят так:Matching новой строки в регулярном выражении с помощью PowerShell

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

GO 

Я хочу, чтобы заменить все SQL CMD переменных строк (строки, начинающиеся с: SetVar) с пустой строкой такой, что данные выглядят следующим образом:

--etc.  

GO 

Это утверждение (где $script содержит данные), кажется, сделать трюк, но по-прежнему оставляет новые строки:

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

приводит:

  
  
--etc.  

GO 

Как включить символ перевода строки в матче? Кажется, это соответствует, но фактически не заменяется. Любая помощь оценивается.

ответ

6

Это предполагает, что ваши данные считываются из какого-либо файла. В зависимости от того, как вы читаете данные, у вас может быть коллекция строк вместо одной строки.

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 

Piping Get-Content для Out-String, как показано ниже будет гарантировать, что вы получите одну строку, а затем вы можете работать на окнах символ новой строки, чтобы удалить соответствующие строки.

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

GO 
+0

Спасибо за чтение между строками - это был gc как массив, который меня заворачивал. Постскриптум Измените '' r''n на \ r \ n, и вы получите очки! – Plymouth223

+0

@ Plymouth223 Эскизный персонаж в Powershell - это обратная сторона. Для этого случая работы с регулярным выражением либо работает, но это обычно не так. Попробуй. :) –

+1

А, получилось - моя проблема была в том, что я попробовал ваш, и это не сработало, поэтому я изменил выражение на «: setvar (. *) \ N», и это произошло. Файл содержит только \ n для новых строк. Благодарю. – Plymouth223

Смежные вопросы