2016-08-17 5 views
1

Я пытаюсь найти и извлечь предложения, которые начинаются с определенного ключевого слова и которые существуют между/начинается/заканчивается ключевым словом. Цель состоит в том, чтобы извлечь предложения, начинающиеся с «ALTER TABLE», которые либо вложены между ключевым словом «GO», либо имеют GO на начальном или конечном блоке. Количество предложений, существующих между ключевыми словами GO, может быть произвольным. Вот мой образец файла и код, который был написан для его достижения.Поиск Powershell до определенного ключевого слова

Содержание SampleFile.sql

ALTER TABLE [dbo].[test1]  
    ADD [country] VARCHAR (30) NULL; 
GO 
alter procedure 
    some procedure code 
GO 
ALTER TABLE 
    something; 
GO 
PROCEDURE ALTER TABLE; 
Drop table; 
GO 
ALTER TABLE [dbo].[test2]  
    ADD [continent] VARCHAR (30) NULL; 

Мой код

$path = 'D:\Script' 
$sampleFile = 'SampleFile.sql' 
$search = "ALTER TABLE" 
(GC $path\$sampleFile -Delimiter 'GO') -match "^$search*" 

Используя этот код, я могу не принести содержание только первого набора ALTER, пока ГО. Если исключить регулярное выражение каретки (^), тогда будут напечатаны все экземпляры «ALTER TABLE» (который также будет включать предложение «ПРОЦЕДУРА ALTER TABLE» до следующего GO). Требуются только предложения, начинающиеся с «ALTER TABLE».

ответ

2

Вам просто нужно многострочный модификатор:

(GC $path\$sampleFile -Delimiter 'GO') -match "(?m)^$search*" 
               ^^^ 

, который сделает ^ соответствует началу строки, а не вся строка.

enter image description here

+0

Спасибо, это сработало –

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