正則表達式之prxchange—短句中唯首單詞首字母大寫
ADAM數(shù)據(jù)集AVISIT的value都是大寫,比如“WEEK 1 DAY 1 HOUR 1”,但是某次項目shell要求呈現(xiàn)“Week 1 day 1 hour 1”,即首個單詞的首字母大寫,其余小寫。
方法較多,比如tranwrd

,又比如用scan把第一個單詞拆開單獨處理,再和剩下的單詞組合。
今天來介紹下正則表達式中prxchange的部分用法。
????基本格式:
?????????????s/regular-expression/replacement-string/
? ? ? ? ? ? ? ? s/…/…/
s 表示:指定一個替換正則表達式,開頭必備。
/…/…/:三條/必備。
第一種是簡單版,借用了SAS lowcase函數(shù),只考慮第一個字母。

(\w) 表示:匹配一個字符(字母、數(shù)字、下劃線)。圓括號 ( )? 表明value存儲在capture buffer 1?!静东@緩沖區(qū)1】
\u 表示:指定下一個字符為大寫。
\U 表示:指定下一個字符串為大寫,直到遇到\E元字符,否則即全部大寫。本例\U也可,因為都僅有一個字符 “W” 。
$1 表示:將capture buffer 1中的數(shù)據(jù)放到結(jié)果中,例子中把“W”放進結(jié)果中。
\B表示:
[a-z] 表示:匹配一個小寫字母。
1表示:指定匹配的次數(shù)。表示匹配一次后結(jié)束搜索。

額外補充:每個單詞首字母大寫。

\L 表示:指定下一個字符串為小寫,直到遇到\E元字符,否則即全部小寫。
此處把“WEEK”、“1”、“DAY”、“1”、“HOUR”、“1”都放進結(jié)果里,然后首位字符\u先大寫,剩余字符均\L小寫。
第二種嚴謹版,適用于格式嚴格統(tǒng)一的value,準確匹配value的格式內(nèi)容。比如下面兩列“WEEK 1 DAY 1 HOUR 1”和“DAY 1 HOUR 1”,不可共用一段代碼。

^表示:開頭匹配。
$表示:結(jié)尾匹配。

第三種就是模糊匹配版,適用于類似的卻不統(tǒng)一的value的格式。比如下面兩列“WEEK 1 DAY 1 HOUR 1”和“DAY 1 HOUR 1”,可共用一段代碼。

結(jié)尾:
???????? 之所以想到用正則解決,是因為tranwrd方法會因為內(nèi)容改變而需要修改程序,scan拆分再組合方法在我司工具里需要新建數(shù)據(jù)集單獨處理,實在有點麻煩并且low。而正則可以在原來基礎(chǔ)上進行修改。
???????? 即使正則在實際工作中所用甚少,但是多學(xué)一種方法可以打開眼界,擴展思路。
???????? 如有問題,歡迎私信,一起討論交流!微信號:Terhing