在Perl裡透過systtem或用雙倒引號(`)執行外部程式可以。但使用crontab卻不行,前提確認了權限已足,經Google大師開示,要先執行profile。
下command:crontab -e進入vi編輯:
在Perl裡透過systtem或用雙倒引號(`)執行外部程式可以。但使用crontab卻不行,前提確認了權限已足,經Google大師開示,要先執行profile。
下command:crontab -e進入vi編輯:
摘自http://catchtest.pixnet.net/blog/post/21981758網站:
換行符號有兩種,一個叫Cr(carriage return),一個是Lf(line feed) |
最初用Perl來Code Generate和Parse Log,現在可以變成專案交付的程式之一了。實作兩個不錯用的工具程式,可以設定於crontab。因為沒設定Perl主題,姑且併到Regex吧!
第一個是用於偵測特定process是否陣亡,若陣亡予以重啟,並透過SMTP發Mail告警,這雖然也可以用bash辦到,但搞不好還有Run在Windows的需求。
在家加班會有點不甘願,但研究和工作有關的技能倒還可以。Java在Regex的跨行比對有點彆扭,用來解析非XML、具Block性質的配置檔會比較清晰。需求如下:
* |
在XML的特殊字元有五:<、>、&、'、"。通常轉特殊字元方式是像把&轉成&。另一種不轉的方式,就是加<![CDATA[><&'" ]]>包覆。所以我有個需求是,避免產出的XML檔變肥,遇到有特殊字元的值,才用<![CDATA[… ]]>包覆。在Java借助Regex方式如下:
colValue.matches(".*[><&'\"].*") |
Java字串的matches方法一定要全域match,所以中括號裡的特殊字元前後都要加.*。
在為轉碼傷腦筋時,曾想把內碼轉成Unicode表示法如:\u4E00的字串混過去。雖然後來不用,不過運用Java Regex把Unicode表示法轉成Unicode字元可以一記:
str = "ABC\\u7CBE\\u8AA0"; |
有個看我的Blog而加入我的msn一個網友,有個Regex問題如下:
1101,"24,236,136","7,256","641,351,276","123",25.50,27.10,25.50,26.60,+,1.20,26.55,213,26.60,125,10.73
原本妄想繼承LazyValidatorForm來避免繼承ActionServlet,就不用動到web.xml設定達到Date型態通透性。結果是不可能,不過倒是玩了一下下日期在Regex的判斷:
import java.util.regex.Matcher; |
好像是Oracle 10g以上才有SQL支援Regex的語法,SQL本身就是宿主語言,Regex又寄宿在SQL上,真是宿主的宿主。
假設Student Table的學號(STD_NO)有:1001~1100,有個Property有key_name和value_context兩個欄位,是key-value值,其中一筆:key_name值為Black,value_context值為1002,1009,1099。如何以一行SQL,把Student table濾掉Black所指定的以逗號分割的學號。
Sample:把20090601,20090610,20090611這串日期序列轉成2009-06-01,2009-06-10,2009-06-11,Perl有記憶小括號,Java則需費周章用Matcher的group,可是單單用String的replaceAll也能辦到,如下:
SampleString.replaceAll("(\\d{4})(\\d{2})(\\d{2})", "$1-$2-$3"); $1是記憶左起第一個括號,$2是第二個,以此類推,因此若若要改成DDMMYYYY,只需在第二個參數改成$3-$2-$1即可。
簡訊內容要是太長,可以分兩則甚至多則簡訊發送,但是中間要是有斷字就不好看了,比如Ho在第一則簡訊最後,llo跑到第二則簡訊開頭。這解決原本不難,這時又有一個需求如:(1)1包/100元(2)6包/500元(3)10包/800元。若第一則簡訊切成最後是:(1)1包/100元(2)6;第二則簡訊卻是:包/500元(3)10包/800元。也不好看。除了斷空白字,還要斷左括號,可是空白字和左括號都要保留在簡訊內容。這時Regex的(?=)語法可以派上用場:
String[] sa = msg.split("(?= |\\()");
為了Parse 1GB多的Log檔,挑出有Exception的樣式,用UltradEdit等Editor肯定大量消耗Memory。還是用Perl寫個小程式簡單。如下:
#!/usr/bin/perl
Java在Regex的支援看來不及Perl。需求如右:"FBI 34"這個字串要取得後綴字為1~2的數字,即"34",在Perl用法就很簡單:
"FBI 34" =~ /(\d{1,2})$/;
ActiveState是微軟轉投資的研發script語言如Perl、Python、Tcl在Windows下運行的執行環境,PPM(Perl Package Manager)下載DBD:Oracle連Oracle沒問題,但找不到DBD:MySQL,最後下載到DBD:mysqlPP,寫連結程式還是不行,最後是下面DNS才過關:
dbi:mysqlPP:database=$sid;host=$host