正則表達式在Linux經常配合grep,sed和awk等用于搜尋關鍵字。正則表達式分為正則表達式和擴展正則表達式:
一、正則表達式
1.1 元字符:
.:匹配任意字符
[]:匹配[]中的任意一個字符
[^]:匹配[]以外的任意字符
[:alpha:]大小寫英文字母
[:digit:]:十進制數字
[:xdigit:]:十六進制數字
[:upper:]:大寫字母
[:lower:]:小寫字母
[:space:]:空格
[:punct:]:標點符號
[:blank:]:空格和制表符(TAB)
[:alnum:]:所有字母和數字
[:print:]:可打印字符
[:graph:]:可打印的非空白字符
^:錨定行首
$:錨定行尾
^$:空行
^PATTERN$:錨定整行
^[[:space:]]$:空白行
\b PATTERN\b | \< PATTERN\>:匹配整個單詞
\b | \<:詞首錨定
\b | \>:詞尾錨定
*:匹配其前面字符任意次,最少0次,最多不限
.*:匹配任意字符任意次
\{n,m\}:匹配其前面字符最少n次,最多m次
\{n\}:匹配其前面字符n次
\{n,\}:匹配其前面字符至少n次
\{,m\}:匹配其前面字符至多m次
\+:匹配其前面字符至少1次,至多無限次
\?:匹配其前面字符0次或1次,最多1次
1.4 分組
\(PATTERN\)\1 :\1表示和前面\(\)中的內容相同,引用前面的內容
1.5 或
|
a \| b:表示a或b
擴展正則表達式和基本正則表達式差別不大,一下為有差別的部分:
+:匹配其前面字符至少1次,至多無限次
?:匹配其前面字符0次或1次,最多1次
{n,m}:匹配其前面字符最少n次,最多m次
{n,}:匹配其前面字符至少n次
{,m}:匹配其前面字符至多m次
{n}:匹配其前面字符n次
三、grep命令:用于匹配關鍵字,支持正則表達式
grep [OPTIONS] PATTERN [FILE…]
常用參數:
-e:同時匹配多個結果,多個結果之間為并列的關系
-i:忽略大小寫
-c:匹配統計的行數
-E:采用擴展正則表達式,相當于egrep
-o:只顯示匹配到的結果
-n:顯示行號
-v:取反
-C #:顯示匹配結果上下#行
-A #:顯示匹配結果下面#行
-B #:顯示匹配結果上面#行
-w:匹配整個單詞
-q:靜默輸出,常用在腳本中,取$?的值
四、例題:
1、顯示三個用戶root、mage、wang的UID和默認shell
cat /etc/passwd|egrep “^root|^mage|^wang”|cut -d: -f 1,3
2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行
[root@localhost script]# cat /etc/rc.d/init.d/functions |egrep “^[_[:alpha:]]+\(\)”
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
[root@localhost script]# echo “/etc/rc.d/init.d/function”|egrep -o “/[[:alpha:]]+$”|cut -d”/”
-f2
4、使用egrep取出上面路徑的目錄名
[root@localhost script]# echo “/etc/rc.d/init.d/function”|egrep -o “/.*/”
5、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255
egrep “[0-9]{1}”
egrep “[0-9]{2}”
egrep “[0-9]{3}”
egrep “2[0-4]{1}[0-9]{1}”
egrep “25[0-5]{1}”
6、顯示ifconfig命令結果中所有IPv4地址
ifconfig | egrep -o “([0-9]{1,3}\.){3}[0-9]{1,3}”
7、將此字符串:welcome to magedu linux 中的每個字符去重并排序,重復次數多的排到前面
[root@localhost script]# echo “welcome to magedu linux”|egrep -o “[[:alpha:]]”|sort|uniq -c|so
rt -rn
原創文章,作者:王子豪,如若轉載,請注明出處:http://www.www58058.com/72773