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

如何编写Perl脚本来替换重复的单词,perl,tsql,Perl,Tsql,如何制定一个命令行Perl脚本,用选定的别名替换所有重复的单词。目前我有一个大约1000行的T-SQL查询。但由于此查询不使用任何别名,因此很难理解和可视化。因此,我手工检查并将表名转换为别名 但是让一个Perl脚本为我做这件事会更有效。如果您知道一个SQL工具可以替代它,您可以建议我如何通过Perl或其他方式来实现这一点吗 以下是我尝试过的: C:\STRAWB~1\perl\bin>perl -pi.orig -we 's/\bV_QXP_ALL_EXCEPTION\b/A/g' te

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

但是让一个Perl脚本为我做这件事会更有效。如果您知道一个SQL工具可以替代它,您可以建议我如何通过Perl或其他方式来实现这一点吗

以下是我尝试过的:

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.

要将表名(如
business\u interaction\u shoptype\u whatnot)替换为
wtf
,请在SQL文件中执行以下操作:

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

这将在将原始副本存储在
wtf.sql.orig

中时将输入文件固定在适当位置。我认为您的问题是希望使用命令行“动态”编辑文件,而不是需要时可以重复使用的文件

i开关可用于在位编辑文件。您追求的基本公式是:

$ perl -i.extension -e CODE FILE
例如:perl-i.bak-e's/find/replace/g'file.txt

此处的文档:

但我建议不要使用命令行,尤其是当您所追求的是易读性时。我不确定要替换什么类型的文本,所以很难说regexp应该是什么样子

#!/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;
}
为什么要在perl二进制文件夹中乱搞?=)


在Windows中,在执行命令行操作时使用双引号而不是单引号。。。出于某种原因。

谢谢,但这对我不起作用。我可能是说错了。你能看到我在哪里执行了错误的逻辑:@salvationisher-你在Windows cmd.exe上,所以你需要用双引号替换单引号。太棒了!正是我需要的!谢谢谢谢你提供的所有细节。但迈克尔的解决方案正是我所寻找的。这是同样的解决方案如果这是您经常做的事情,我建议您使用非常紧凑的regexp创建一个脚本文件。祝你好运
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.