Reemplazar en archivos con patrón

1

Soy un usuario ocasional de expresiones regulares, y mi conocimiento de ellas está lejos de ser estelar.

Tengo el siguiente texto en varios centenarios de archivos:

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] ...

A los cambios para cada archivo, las tres líneas anteriores fueron insertadas (reemplazar en archivos).

Lo que estoy tratando de lograr es hacer que B se convierta en A en cada archivo. Me gusta:

"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]"

¿Alguien sabe si es posible y cómo hacerlo?

Gracias.

EDITAR. Olvidé decir que antes y después del texto anterior hay otras líneas de código, variable para cada archivo. Este no es el único texto en los archivos.

Sergio
fuente

Respuestas:

0

Necesitarás una referencia inversa:

Partido: ([A-Za-z0-9\s]+) \[\w+\] ([A-Za-z0-9\s]+) (\[\w+\])

Reemplazar: \1 \3 \2 \3

Los paréntesis capturan su contenido, los \ n lo reproducen. [A-Za-z0-9\s]+ debe coincidir con la mayoría de sus sentencias de SQL, y \[\w+\] Debe coincidir con los bits entre corchetes.

KJ4IPS
fuente
Gracias. Tu expresión coincidente no obtiene ningún resultado. ¿Podría ser porque esperas solo el texto anterior en el archivo?
Sergio
0

Al utilizar referencias inversas y desagregación de la expresión coincidente, llegué a una solución de trabajo que, si bien es grande y fea, hace el trabajo perfectamente:

Partido: (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+\])

Reemplazar: $1$6$3$6$5$6

Sergio
fuente