《Linux命令行與shell腳本編程大全》 第十九章 學習筆記

第一部分:Linux命令行
《Linux命令行與shell腳本編程大全》 第一章:初識Linux shell
《Linux命令行與shell腳本編程大全》 第二章:走進shell
《Linux命令行與shell腳本編程大全》 第三章:基本的bash shell命令
《Linux命令行與shell腳本編程大全》 第四章:更多的bash shell命令
《Linux命令行與shell腳本編程大全》 第五章:使用Linux環境變量
《Linux命令行與shell腳本編程大全》 第六章:理解Linux文件權限
《Linux命令行與shell腳本編程大全》 第七章:管理文件系統
《Linux命令行與shell腳本編程大全》 第八章:安裝軟件程序
《Linux命令行與shell腳本編程大全》 第九章:使用編輯器

第二部分:shell腳本編程基礎
《Linux命令行與shell腳本編程大全》 第十章:構建基本腳本
《Linux命令行與shell腳本編程大全》 第十一章:使用結構化命令
《Linux命令行與shell腳本編程大全》 第十二章:更多的結構化命令
《Linux命令行與shell腳本編程大全》 第十三章:處理用戶輸入
《Linux命令行與shell腳本編程大全》 第十四章:呈現數據
《Linux命令行與shell腳本編程大全》 第十五章:控制腳本

第三部分:高級shell編程
《Linux命令行與shell腳本編程大全》 第十六章:創建函數
《Linux命令行與shell腳本編程大全》 第十七章:圖形化桌面上的腳本編程
《Linux命令行與shell腳本編程大全》 第十八章:初識sed和gawk
《Linux命令行與shell腳本編程大全》 第十九章:正則表達式
《Linux命令行與shell腳本編程大全》 第二十章:sed進階
《Linux命令行與shell腳本編程大全》 第二十一章:gawk進階
《Linux命令行與shell腳本編程大全》 第二十二章:使用其他shell

第四部分:高級shell腳本編程主題
《Linux命令行與shell腳本編程大全》 第二十三章:使用數據庫
《Linux命令行與shell腳本編程大全》 第二十四章:使用Web
《Linux命令行與shell腳本編程大全》 第二十五章:使用E-mail
《Linux命令行與shell腳本編程大全》 第二十六章:編寫腳本實用工具
《Linux命令行與shell腳本編程大全》 第二十七章:shell腳本編程進階


第十九章:正則表達式

 

由於之前我已經寫過比較詳盡的正則教程

深入入門正則表達式(java) - 引言

深入入門正則表達式(java) - 1 - 入門基礎 
深入入門正則表達式(java) - 2 - 基本實例

深入入門正則表達式(java) - 3 - 正則在java中的使用

深入入門正則表達式(java) - 匹配原理 - 1 - 引擎分類與普適原則

深入入門正則表達式(java) - 匹配原理 - 2 - 回溯

並且在Unix & Linux 大學教程中的第20章也有筆記,所以這裏筆記較爲簡略,一些簡單的示例在這裏就不在演示了。

 

什麼是正則表達式

定義

正則表達式類型

Linux中,有兩種流行的正則表達式引擎:

1.POSIX基本正則表達式(BRE)引擎

2.POSIX擴展正則表達式(ERE)引擎

大多數Linux工具至少符合BRE引擎規範,能夠識別所有模式和符號。

一些工具,比如sed只實現了BRE引擎規範的子集。gawk實現了ERE引擎。

 

定義BRE模式

純文本

特殊字符

斜線(/)不是正則的元字符,但是在sed和gawk中使用,也需要轉義

錨字符

下面利用錨點來刪除空白行

$ cat test.txt 
A:11221133
B:44115522



line 5
$ sed '/^$/d' test.txt 
A:11221133
B:44115522
line 5

(並不是所有程序都可以這麼幹的)

點字符

字符組

排除字符組

使用區間

特殊字符組

BRE特殊字符組

含義類似於
[[:lower:]]小寫字母a-z
[[:upper:]]大寫字母A-Z
[[:alpha:]]大小寫字母a-zA-Z
[[:alnum:]]大小寫字母、數字a-zA-Z0-9
[[:digit:]]數字0-9
[[:punct:]]標點符號-- 
[[:print:]]匹配任意可打印字符--
[[:blank:]]空格或製表符(空白符)--
[[:space:]]匹配任意空白字符空格、製表符、NL、FF、VT和CR

一個簡單的示例:

$ cat test.txt 
A:11221133
B:44115522



line 5
$ sed -n '/[[:digit:]]/p' test.txt 
A:11221133
B:44115522
line 5

這裏使用\d是無效的

星號

 

擴展正則表達式

問號

加號

花括號

警告:默認情況下,gawk不識別表達式區間,必須指定--re-interval選項

注意:gawk只支持下面幾種形式

{m},{m,n},{m,}

並不支持{,m}

管道符號

聚合表達式

 

實用中的正則表達式

目錄文件計數

也和書中一樣,我們統計$PATH中的目錄含有的文件數目。

其實這裏關鍵的就是把$PATH裏的目錄變成數組參數而已。

下面是書中的例子,不過這個例子是有問題的:

$ echo $PATH | sed 's/:/ /g'

代碼很容易理解。環境變量PATH中的目錄是用冒號分割的,現在利用sed,改爲空格分割路徑,這樣就可以直接對此使用循環了。

但是,PATH中的目錄是允許重複的!也就是說,你可以把同一個目錄多次的加入到這個變量中(雖然這麼做沒有半點好處),當然,很有可能是其他軟件設置的PATH與你自己設置的重複了。不管怎樣,我們是不需要重複統計的。

下面是修正後的代碼:

echo $PATH | sed 's/:/\n/g' | sort | uniq

這裏用換行替換冒號,這樣也能直接對此結果使用循環。這麼做的好處就是,我們可以使用sort然後使用uniq去重複

驗證電話號碼

解析郵件地址

 

關於正則更多內容,可以參考我之前的寫的教程,裏面有詳盡的正則基礎講解以及示例。

深入入門正則表達式(java) - 引言

深入入門正則表達式(java) - 1 - 入門基礎 
深入入門正則表達式(java) - 2 - 基本實例

深入入門正則表達式(java) - 3 - 正則在java中的使用

深入入門正則表達式(java) - 匹配原理 - 1 - 引擎分類與普適原則

深入入門正則表達式(java) - 匹配原理 - 2 - 回溯

《Unix & Linux 大學教程》 - 第二十章 正則表達式

 

 

轉貼請保留以下鏈接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章