【轉載並記錄下】shell 首字母大寫

 如何使用shell將文件中單詞首字母轉換爲大寫2012-03-25 22:54:53標籤:shell sed awk 休閒 大小寫轉換原創做品,容許轉載,轉載時請務必以超連接形式標明文章 原始出處 、做者信息和本聲明。不然將追究法律責任。http://zzkai.blog.51cto.com/804611/816847html

今天在CU看到一個帖子,其中有這個問題很值得啓發思考與學習。正則表達式

如何使用shell將文件中單詞首字母轉換爲大寫?shell

這個問題看似簡單,實現起來確不易,即便是在vi甚至是wordpad條件下也很困難。還好咱們有偉大的sed和awk。ide

先來分析問題,將文件中的每一個單詞的首字母轉換爲大寫,這裏有兩個難點。函數

1. 如何區分單詞的邊界?學習

2. 大小寫轉換如何實現?ui

對於單詞邊界的區分,通常英文習慣下咱們輸入單詞前面都是空格或換行符號;大小寫轉換在awk中有函數toupper()。先嚐試使用awk解決。spa

[root@managevm1 ~]# cat test consult section 3.1 in the Owner and  operator guide for a description of the tape drives available on your system. [root@managevm1 ~]# awk '{for (i=1;i<=NF;i++)printf toupper(substr($i,0,1))substr($i,2,length($i))" ";printf "\n"}' test Consult Section 3.1 In The Owner And Operator Guide For A Description Of The Tape Drives Available On Your System.

解析:在awk中用for循環遍歷每行中的的每一個字段,NF爲每行最後一個字段,如$1,$2,$3,$NF爲第一,二,三,最後一個字段。toupper函數將字符串轉換爲大寫。substr(string,M,[N])用於對string取從第M到N的子串。length(string)返回字符串長度。code

再來看看使用sed如何實現。htm

咱們可能會這樣寫:

s/\([ ]\)a/\1A/g s/\([ ]\)b/\1B/g s/\([ ]\)c/\1C/g ....... s/\([ ]\)z/\1Z/g

但這樣沒法匹配每行開頭的單詞,由於每行開頭是沒有空格的。因而咱們加上以下

s/^a/A/ s/^b/B/ ..... s/^z/Z/

OH,要不要這麼複雜!來看看這一種寫法吧!另你恍然大悟吧?

[root@managevm1 ~]# sed 's/\b[a-z]/\U&/g' test Consult Section 3.1 In The Owner And  Operator Guide For A Description Of The Tape Drives Available On Your System.

解析,\b \U是正則表達式的元符號。\b用來定界,\U大小轉換。&是sed前面替換的字符串。

 5-7。字母數字正則元符號

符號 原子性 含義 
\0 
 匹配空字符(ASCII NUL)。 
\NNN 
 匹配給出八進制的字符,最大值爲\377 
\n 
 匹配前面第n個捕獲字串(十進制)。 
\a 
 匹配警鐘字符(BEL)。 
\A 
 若是在字串的開頭爲真 
\b 
 匹配退各字符(BS)。 
\b 
 在字邊界爲真 
\B 
 不在字邊界時爲真 
\cX 
 匹配控制字符 Control-x\cZ\c[,等)。 
\C 
 匹配一個字節(C字符),甚至在utf8中也如此(危險) 
\d 
 匹配任何數字字符 
\D 
 匹配任何非數字字符 
\e 
 匹配逃逸字符(ASCII ESC,不是反斜槓)。 
\E —— 
結束大小寫(\L\U)或者掩碼(\Q)轉換 
\f 
 匹配進頁字符(FF)。 
\G 
 若是在前一個m//g的匹配結尾位置時爲真 
\l —— 
只把下一個字符變成小寫 
\L —— 
\E之前的字母都變成小寫 
\n 
 匹配換行符字符(一般是NL,可是在Mac上是CR)。 
\N{NAME} 
 匹配命名字符(\N{greek:Sigma})。 
\p{PROP} 
 匹配任何有命名屬性的字符 
\P{PROP} 
 匹配任何沒有命名屬性的字符 
\Q —— 
引發(消元)直到\E前面的字符 
\r 
 匹配返回字符(一般是CR,可是在Mac上是NL)。 
\s 
 匹配任何空白字符。 
\S 
 匹配任何非空白字符。 
\t 
 匹配水平製表符(HT)。 
\u —— 
只把下一個字符變成標題首字符 
\U —— 
大寫(不是標題首字符)\E 之前的字符。 
\w 
 匹配任何字符(字母數字加"_" )。 
\W 
 匹配任何非字字符。 
\x{abcd} 
 匹配在十六進制中給出的字符。 
\X 
 匹配Unicode裏的組合字符序列字串。 
\z 
 只有在字串結尾時爲真 
\Z 
 在字串結尾或者在可選的換行符以前爲真。

本文出自 「凱騎龜來~~」 博客,請務必保留此出處http://zzkai.blog.51cto.com/804611/816847

相關文章
相關標籤/搜索