目錄 | 使用 Regular Expression 時的注意事項 | Appendix A
範 例
本節列出數個 Regular Expression 的應用簡例, 供讀者參考. 由這些範例中,
讀者可一窺實際應用時, 如何藉由 Regular Expression 來表達字串, 來完成
某些目的. 至於各指令像 vi, sed, awk, ...中之語法說明已非本文所能涵蓋,
讀者請自行參考相關書籍.
- a. 將檔案中所有字串 ``Regular Expression'' 或 ``Regular expression'' 換成
``Regexp''.
- 以 vi 編輯該檔案, 並在 vi 命令輸入模式下執行 :
:1,$ s/ Regular [Ee]xpression/Regexp/g
- b. 將檔案中所有具 ``ddd-dddd'' 特徵的字串(d表阿拉伯數字)之前插入字串
``Tel :''.
- 以 vi 編輯該檔案, 並在, vi 命令輸入模式下執行 :
:1,$ s/[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]/Tel:&/g
- 說明 : `` &'' 代表執行時實際合於該 Regular Expression 的字串.
- c. 將檔案中所有俱有 `` program數字.c'' 特徵的字串換成 ``test數字.f''.
- 解法 : 以vi編輯該檔案, 並在vi命令輸入mode下執行 :
:1,$ s/ program\([0-9][0-9]**\)\.c/test\1.f/g
- 說明 : Regexp `` [0-9][0-9]*'' 表示一位或一位以上的阿拉伯數字.
`` \1'' 被找到的字串中的數值部分. (被\(...\)括住的部分).
- d. 將檔案中第5-13行, 整個區域往右移5格(空白字元).
- 解法 : 以vi編輯該檔案, 並在vi命令輸入mode下執行
:5,13 s/ .*/ &/
- 說明 : Regexp `` .*" 用以 match 整個資料列(之後以&表之). 並用
`` &''(5個空白及原先之資料列)取代該列資料.
- e. 將上例檔案中的資料列(5-13行), 往左移回3格.
- 解法 : 以vi編輯該檔案, 並在vi命令輸入mode下執行
:5,13 s/ \^ ///
- 說明 : 將行首的三個空白字元換成空字串.
- f. 試從一個檔案的全名中分離出其路徑及檔名.
- 解法 : 編輯如下的script並取名為 ``sepname''
awk '
BEGIN {
match( ARGV[1], /.*\//)
print "path=", substr(ARGV[1], 1 ,RLENGTH-1)
print "name=", name = substr(ARGV[1], RLENGTH+1 )
} ' $1 }
- 執行 $ sepname /usr/local/bin/xdvi
- 結果印出 path= /usr/local/bin
name= xdvi
- g. 將檔案中以``From''或``from''為行首的資料列印出
執行 $ awk '/^[Ff]rom/ ' 資料檔檔名
- h. 去除擋案中空白行
執行 $ sed -e "/ ^$/d"
後 語
雖然 Regular Expression 僅是一種字串的表示方式, 但從上列的範例
中不難窺出, 配合接受 Regular Expression 的指令或工具, 其應用面
將遠超出找尋字串及置換字串. 使用 Regular Expression 不僅擴大了
字串的表達能力, 讓使用者很容易進行字串判斷; 使資料處理的過程便
為更為迅速便利.
目錄 | 使用 Regular Expression 時的注意事項 | Appendix A