一、正則表達式
在計算機科學中,正則表達式是用來描述或匹配一系列符合某個句法規則的字符串;在文本編輯器或某些工具(例如bash環境)中,正則表達式通常被用檢索那些符合某個模式的文本內容。在linux中,正則表達式是由一類字符所書寫的模式。通過實現定義好的模式來實現對bash環境中所需要字符串的過濾。
正則表達式是由一系列的普通字符和一些元字符組成。普通字符主要包括了大小寫字母和數字。元字符則具有特殊的含義。它不表示字符本身的意義而用於額外的一些功能性的描述。正則表達式有基本正則表達式和擴展正則表達式之分,下面我將列出在linux中常用的一些常用的元字符,並用相關的實例來進行講解:
1.基本正則表達式
2.擴展正則表達式
以下主要列出不同於基本正則表達式的部分元字符
3.在linux中還有其它的一些轉義字符,但這裡僅對常用的進行了一些列舉和解釋。有興趣的朋友可以通過“man 7 regex”查看man文檔中提供的幫助系統。
二、grep命令的使用
下面我來向大家介紹如何通過grep命令來使用正則表達式進行相應的模式匹配。首先我來介紹一下grep命令的基本使用。
grep (Global Search Regular Expression and Printing),表示全面搜索正則表達式並進行打印,是一種強大的文本搜索工具,它能夠使用正則表達式搜索文本,並把匹配的行打印出來。grep有三種,包括grep、egrep和fgrep。
分別表示如下:
本文URL:http://www.bianceng.cn/OS/Linux/201410/45620.htm
三、以下我將在rhel6.4上使用具體的實例來顯示grep命令如何使用正則表達式來進行模式匹配。
使用前在當前bash中對grep設置一個別名,命令如下:
aliasgrep='grep --color=auto'
1.顯示/etc/passwd文件中以不區分大小寫的s開頭的行。
grep"^[sS]"/etc/passwd egrep"^(s|S)"/etc/passwd
2.顯示默認shell為bash,且其用戶ID號最小的用戶的用戶名。
grep"/bin/bash$"/etc/passwd| sort-n -t: -k3 | cut-d: -f1
3.顯示/etc/rc.d/rc.sysinit中以#開頭,且後面跟一個或多個空白字符,而後又跟了任意非空白字符的行。
grep"^#[[:space:]]\{1,\}[^[:space:]]"/etc/rc.d/rc.sysinit egrep"^#[[:space:]]+[^[:space:]]"/etc/rc.d/rc.sysinit
4.顯示/etc/rc.d/rc.sysinit中符合任意單個字符後面跟了個n,n後面有任意長度的任意字符,而後是任意單個字符後面跟了個n,但後面的n之前的字符要與前面的n之前的字符相同。
本文URL:http://www.bianceng.cn/OS/Linux/201410/45620.htm
grep"\(.n\)".*\1" /etc/rc.d/rc.sysinit
5.顯示test.txt文件中的,1位數,或2位數。
grep -w "[0-9]\{1,2\}" test.txt
grep "\<[0-9]\{1,2\}\>" test.txt
6.顯示ifconfig命令結果中的1-255之間的整數。
ifconfig | egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
7.匹配ifconfig命令中的IP地址,要求匹配范圍為1.0.0.1~~223.255.255.254
ifconfig | egrep -o --color "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"