Shell正則表達式linux
正則表達式:處理大量的字符串而定義的規則和方法,經過規定的符號的組合迅速的找到須要的內容。正則表達式
注意事項:shell
1 正表達式的應用普遍,Linux中經常使用的正則表達式的命令:grep(egrep),sed,awkide
2.Linux的正則表達式和命令行中的通配符有本質的區別字體
Eg:命令行中通配符「*」 表示匹配全部,不一樣於正則表達式中的 *spa
]# ll *.sh #命令行中「*」表示匹配全部命令行
3.文檔閱讀說明 文檔
文中 「]#」 表示在命令行下執行的命令即文中的綠色字體能夠複製到命令航中執行字符串
本文以實例講解,讀者能夠打開虛擬機,邊讀邊練虛擬機
2014/12/4修改文中錯誤
基礎正則表達式以grep命令講解
注意事項:
a.linux正則表達式以行爲單位處理
b.爲了後面便於講解,給grep取別名,目的是給匹配到的內容帶顏色顯示,取別名操做以下:
]# alias grep=‘grep --color=auto’ #只在當前shell生效,如何使永久性的生效在後文有講解
c.注意字符集,要是grep命令匹配的內容顯示異常,需定義字符集:LC_ALL=C
]# LC_ALL=C
輔助文檔:
# cat reTest1
I am wewin not WEWIN
I like linux
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
hahahahaha
Linux正則表達式
1)^world 以world開頭的行
2)world$ 以world結尾的行
3)^$ 表示空行
Eg:
]# alias grep='grep --color=auto' #
]# grep ‘I’ reTest1 #包含I的行
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
]# grep '^I' reTest1 # 以 I 開頭的行
I am wewin not WEWIN
I like linux
I like badminntion ball,billard ball and chinese chess.
]# grep 'I$' reTest1 #以I結尾的行
do you like me? but not do you like I
]# grep "^$" reTest1 #空行
]# grep -v "^$" reTest1 #排除空行
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
hahahahaha
4). 表明且只能表明任意一個字符
5)\ 轉義字符,有特殊意義的字符表示爲普通的意義,還原其本來的意義
6)* 重複一個或多個前面的一個字符,不是通配符中的表示全部的意思
7)+ 前面的元素或者組合必須出現一次或屢次,屬於擴展的,須要用egrep
8)?規定前面的組合出現零次或一次,
9).* 匹配全部的字符。^.* 以任意多個字符開頭
]# grep "." reTest1 #匹配全文,可是中間的空行會消失,要是隻是單純的匹配字符 「.」 須要轉義
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
hahahahaha
]# grep "\." reTest1 #匹配包含「.」的行,須要脫去特殊含義。
I like badminntion ball,billard ball and chinese chess.
]# grep "0*" reTest2 #包含一個或多個0
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
hahahahaha
10)[a-z] #匹配a-z字符集合內任意一個字符集
]# grep [a-z] reTest1
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
hahahahaha
11)[asdfds] #統配a-z的任意一字符集
]# grep [asdfds] reTest1
I am wewin not WEWIN
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
hahahahaha
]# grep [^a-z] reTest1 #匹配包含除過a-z字符的行,
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
13)^[abc] 以[a-z]開頭的行
]# grep ^[a-z] reTest1
do you like me? but not do you like I
number 23000000
number 12000
hahahahaha
14){n,m} 重複n到m次,前一個字符
15){n,}至少n次多了不限
16){n} n次
17){,m}至多m次,少了不限
注意:grep要對{轉義},\{ \{ 要是用egrep就不須要轉義 egrep至關於grep -E
]# grep "0\{3\}" reTest1 #0連續出現3次
]# grep -E "0\{3\}" reTest1
]# grep "0\{,5\}" reTest1 #0出現0-5次
有報錯,內在的bug,能夠用grep "0\{0,5\}",兩個屬於等價的查詢