Substituir em arquivos com padrão

1

Sou um usuário ocasional de expressões regulares e meu conhecimento sobre eles está longe de ser estelar.

Eu tenho o seguinte texto em vários arquivos centenários:

IF EXISTS (SELECT TOP 1 1 FROM sys.objects WHERE object_id=OBJECT_ID(N'[dbo].[B]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[B]
GO
CREATE PROCEDURE [dbo].[A] ...

Uma alteração para cada arquivo, as três linhas anteriores foram inseridas (substituídas nos arquivos).

O que estou tentando fazer é fazer com que B se torne A em todos os arquivos. Como:

"blah blah [B] more blah [A1]" => "blah blah [A1] more blah [A1]"
"blah blah [B] more blah [A2]" => "blah blah [A2] more blah [A2]"
...
"blah blah [B] more blah [An]" => "blah blah [An] more blah [An]"

Alguém sabe se é possível e como fazê-lo?

Obrigado.

EDIT. Eu esqueci de dizer que antes e depois do texto acima existem outras linhas de código, variáveis para cada arquivo. Este não é o único texto nos arquivos.

    
por Sergio 10.07.2017 / 19:29

2 respostas

0

Usando backreferences e desagregação da expressão correspondente, cheguei a uma solução de trabalho, que embora seja grande e feia, faz o trabalho perfeitamente:

Correspondência: (IF EXISTS \(SELECT TOP 1 1 FROM sys\.objects WHERE object_id=OBJECT_ID\(N'\[dbo\]\.)(\[\w+\])('\) AND type in \(N'P', N'PC'\)\)\r\n DROP PROCEDURE \[dbo\]\.)(\[\w+\])(\r\nGO\r\nCREATE PROCEDURE \[dbo\]\.)(\[\w+\])

Substituir: $1$6$3$6$5$6

    
por 10.07.2017 / 21:16
0

Você precisará de uma referência anterior:

Correspondência: ([A-Za-z0-9\s]+) \[\w+\] ([A-Za-z0-9\s]+) (\[\w+\])

Substituir:

Os parênteses capturam seu conteúdo, o \ n reproduz. [A-Za-z0-9\s]+ deve corresponder à maioria das suas declarações SQL e \[\w+\] deve corresponder aos bits entre colchetes.

    
por 10.07.2017 / 19:43