如何编写Perl脚本来替换重复的单词

时间:2011-04-28 16:02:17

标签: perl tsql

如何制定命令行Perl脚本以用所选别名替换所有重复的单词。目前我有一个大约1000行的T-SQL查询。但由于此查询不使用任何别名,因此很难理解和可视化。所以我手工完成它并将表名转换为别名。

但是让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 个答案:

答案 0 :(得分:2)

要使用business_interaction_shoptype_whatnot替换wtf这样的表名,请在SQL文件中执行以下操作:

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

这将在wtf.sql.orig中存储原始副本时就地输入文件mofify。

答案 1 :(得分:0)

我认为您需要一个命令行来“动态”编辑文件,而不是您需要时可以重复使用的文件。

-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中,出于某种原因,在执行命令行操作时使用双引号而不是单引号。

相关问题