一.正則表達式
1.1國際字符模式匹配或匹配模式的類名
[:alnum:] : 0-9,A-Z,a-z
[:alpha:] : A-Z,a-z
[:upper:] : A-Z
[:lower:] : a-z
[:digit:] : 0-9
[:space:] : 空格或tab鍵
1.2基礎正則表達式
^word:待查找的字符串在行首。
word$:待查找的字符串在行尾。
. :代表一定有一個任意字符的字符。
\ :轉義字符,將特殊符號的意義去除。
* :重復0個到無窮多個的前一個字符。
[list]:從字符集合的RE字符裡面找出想要選取的字符,在[]當中代表一個待查找的字符;
例如:[afg]代表a或f或g的意思。
[n1-n2]:代表想要找出的字符范圍;
eg:[0-9]表示0到9;[a-z]代表a到z。
[^list]:找出不要的字符串或范圍,即找出不含list中字符串的;
eg:[^A-Z]:代表不要非大寫字母;[^t]:不要字母t。
\{n,m\}:相當於{n,m}的轉義,因{的轉義為\{,因}的轉義為\},表示連續n到m個前一個字符。
\{n\}:相當於{n},即表示重復n個前一個字符。
\{n,\}:相當於{n,},表示連續n個以上的前一個字符。
注:正則表達式的特殊字符與一般命令行輸入命令的“通配符”並不相同。在通配符中*表示0到無限多個字符。但在正則表達式中,*則是0到無窮多個前一個字符。
eg:查找以a開頭的文件名的兩種實現:
通配符: ls -l a*
正則表達式:ls -l | grep '^a.*'
1.3擴張正則表達式
grep默認只支持基礎正則表達式,如果使用擴展性表達式,可以使用grep -E,不過更建議直接使用egrep。egrep == grep -E。
+ :重復一個或一個以上的前一個RE字符。
eg:egrep -n 'go+d' a.txt
即god,good,goood,...。
? :0個或1個的前一個RE字符。
eg: egrep -n 'go?d' a.txt
即gd,god,good,...。
| :用或(or)的方式找出數個字符串。
eg:egrep -n 'gd|god' a.txt
查找含gd或good的行。
():找出‘組’字符串
eg:egrep -E 'g(la|oo)d' a.txt
找出glad或good的行。
()+:多個重復組的判別
eg:egrep 'A(xyz)+C' a.txt
開頭為A,結尾為C,中間位1一個以上的xyz字符串。
注:RE:regular expression(正則表達式)。