2011-12-22 4 views
1

У меня есть набор сценариев SQL, которые хотят изменить схему.Notepad ++ Замена регулярных выражений

create table Service.Table1 (col1 varchar(100)); 
create table Operation.Table2 (col1 varchar(100)); 
create table Support.Table3 (col1 varchar(100)); 

Однако, схема собирается изменить

Service -> Sev 
Operation -> Opn 
Support -> Spt 

Регулярное выражение поиска легко ([A-Za-z0-9_]+)\.([A-Za-z0-9_]+)

Однако, как сделать условную замену в Notepad ++ или другие инструменты, если они могут?

Спасибо!

+0

Возможный дубликат [Multiple слово поиска и замены в Notepad ++] (http://stackoverflow.com/questions/11389466/multiple-word-search-and-replace-in-notepad) – AdrianHHH

ответ

0

я бы запустить заменить 3 раза, один раз для каждой схемы:

Find: 
create table Service\. 
Replace with: 
create table Svc. 

Find: 
create table Support\. 
Replace with: 
create table Spt. 

Find: 
create table Operation\. 
Replace with: 
create table Opn. 

Или вот один, который использует группы ссылок:

Find: 
Service(\.[^\s]+)(.*) 
Replace with: 
Svc\1\2 

Здесь \1 проведет оператор точка и таблицы name и \ 2 содержит остальную часть строки.

0

Notepad ++ реализация регулярного выражения на самом деле не является мощным; так,

другие инструменты, если они могут?

Вот способ сделать это:

perl -pi.back -e '%tr=(Service=>"Sev",Operation=>"Opn",Support=>"Spt");s/(?<=create table)(\w+)/$tr{$1}/e;' TheFile 

Вы можете добавить любое количество Original => 'Modified', как вы хотите в хэш %tr.

TheFile будет доставляться в TheFile.back перед обработкой.

2

Если у вас есть предопределенный набор схем, вы можете использовать условную замену в Notepad ++ вроде этого:

            Найти: (?:(?<a>Service)|(?<b>Operation)|(?<c>Support))\.(?<n>[A-Z0-9_]+)
Заменить: (?{a}Sev:(?{b}Opn:Spt)).$+{n}

Номер матча должен быть отмечен выключен, и Регулярное выражение должно быть по адресу.

enter image description here

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