2011-04-28 42 views
1

如何制定一個命令行Perl腳本以用所選別名替換所有重複的單詞。目前我有大約1000行的T-SQL查詢。但是因爲這個查詢不使用任何別名,所以很難理解和可視化。所以我通過手工完成並將表名轉換爲別名。如何編寫Perl腳本來替換重複的單詞

但是讓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

要使用wtf替換表名狀business_interaction_shoptype_whatnot,做你的SQL文件如下:

這將mofify輸入文件IN-同時將原始副本存儲在wtf.sql.orig中。

+0

謝謝,但這並不適合我。我可能是錯誤的。你能看到我執行錯誤的邏輯: – salvationishere 2011-04-28 16:39:40

+0

@salvationishere - 你在Windows cmd.exe,所以你需要用雙引號替換單引號。 – Lumi 2011-04-28 16:57:42

+0

太棒了!正是我需要的!謝謝! – salvationishere 2011-04-28 17:46:22

0

我提出你的問題意味着你需要一個命令行來「隨時」編輯文件,而不是一個你可以在需要時重新使用的文件。

-i開關可用於編輯文件。基本公式你是後:

$ perl -i.extension -e CODE FILE 

例如:perl的-i.bak -e 'S /查找/替換/ 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中,使用雙引號而不是單引號當做命令行的東西......出於某種原因。

+0

感謝您的所有細節。但邁克爾的解決方案正是我所期待的。 – salvationishere 2011-04-28 17:47:38

+0

這是相同的解決方案。 ;)如果這是你經常做的事情,我會建議創建一個非常緊密的正則表達式的腳本文件。祝你好運! – TLP 2011-04-28 18:41:10