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