Как написать Perl-скрипт для замены повторяющихся слов - PullRequest
1 голос
/ 28 апреля 2011

Как мне сформулировать сценарий Perl для командной строки, чтобы заменить все повторяющиеся слова выбранными псевдонимами. В настоящее время у меня есть запрос T-SQL с около 1000 строк. Но поскольку этот запрос не использует псевдонимы, его трудно понять и визуализировать. Поэтому я делаю это вручную и преобразую имена таблиц в псевдонимы.

Но было бы более эффективно, если бы Perl-скрипт сделал это для меня. Можете ли вы посоветовать, как я могу сделать это через Perl, или если вы знаете инструмент SQL, который может сделать это вместо этого?

Вот что я попробовал:

C:\STRAWB~1\perl\bin>perl -pi.orig -we 's/\bV_QXP_ALL_EXCEPTION\b/A/g' test.sql
Useless use of a constant (s/\bV_QXP_ALL_EXCEPTION\b/A/g) in void context at -e
line 1.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Чтобы заменить имя таблицы, например business_interaction_shoptype_whatnot, на wtf, выполните следующие действия в файле SQL:

perl -pi.orig -we 's/\bbusiness_interaction_shoptype_whatnot\b/wtf/g' wtf.sql

Это позволит уточнить входной файл на месте при сохранении первичной копии в wtf.sql.orig.

0 голосов
/ 28 апреля 2011

Я полагаю, что ваш вопрос означает, что вы хотите, чтобы командная строка редактировала файлы «на лету», а не файл, который вы можете использовать повторно, когда вам это нужно.

Ключ -i можно использовать для редактирования файла на месте. Базовая формула, которую вы ищете:

$ perl -i.extension -e CODE FILE

Например: perl -i.bak -e 's / find / replace / g' file.txt

Документация здесь: http://perldoc.perl.org/perlrun.html

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

#!/bin/perl -i.bak
# Notice the "-i" switch

use strict;
use warnings;

while (<>) {
    s/Case-Sensitive-text/CST/g;
    s/case-insensitive-text/CIT/ig;
    s/\[text inside brackets\]/no_brackets/g;
}

Этот файловый скрипт будет делать то же самое, если вызывается с помощью script.pl myfile.txt

ETA:

C:\STRAWB~1\perl\bin>perl -pi.orig -we 's/\bV_QXP_ALL_EXCEPTION\b/A/g' test.sql
Useless use of a constant (s/\bV_QXP_ALL_EXCEPTION\b/A/g) in void context at -e
line 1.

Почему вы бездельничаете внутри двоичной папки perl? =)

В Windows вы используете двойные кавычки вместо одинарных кавычек при выполнении командных строк ... по некоторым причинам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...