正規表示式只是字串的一種描述,只有和支援正規表示式的工具相結合才能進行字串處理。本文以grep為例來講解正規表示式。
功能:輸入檔案的每一行中查詢字串。
基本用法:
grep [-acinv] [--color=auto] [-a n] [-b n] '搜尋字串' 檔名引數說明:
-a:將二進位制文件以文字方式處理
-c:顯示匹配次數
-i:忽略大小寫差異
-n:在行首顯示行號
-a:after的意思,顯示匹配字串後n行的資料
-b:before的意思,顯示匹配字串前n行的資料
-v:顯示沒有匹配行-a:after的意思,顯示匹配部分之後n行-b:before的意思,顯示匹配部分之前n行
--color:以特定顏色高亮顯示匹配關鍵字
『搜尋字串』是正規表示式,注意為了避免shell的元字元對正規表示式的影響,請用單引號(』』)括起來,千萬不要用雙引號括起來("」)或者不括起來。
正規表示式分為基本正規表示式和擴充套件正規表示式。下面分別簡單總結一下。
正規表示式學習,主要是對正規表示式元資料的學習。正規表示式本身沒有什麼高深的東西,本文僅僅對基本正規表示式的元資料進行一下總結:
\s \b \s都是支援的,以及如下:
元資料意義和範例
^word
搜尋以word開頭的行。
例如:搜尋以#開頭的指令碼注釋行
grep –n 『^#』 regular.txt
word$
搜尋以word結束的行
例如,搜尋以『.』結束的行
grep –n 『.$』 regular.txt
.匹配任意乙個字元。
例如:grep –n 『e.e』 regular.txt
匹配e和e之間有任意乙個字元,可以匹配eee,eae,eve,但是不匹配ee。
\轉義字元。
例如:搜尋』,』是乙個特殊字元,在正規表示式中有特殊含義。必須要先轉義。
grep –n 『\」 regular.txt
*前面的字元重複0到多次。
例如匹配gle,gogle,google,gooogle等等
grep –n 『go*gle』 regular.txt
[list]
匹配一系列字元中的乙個。
例如:匹配gl,gf。
grep –n 『g[lf]』 regular.txt
[n1-n2]
匹配乙個字元範圍中的乙個字元。
例如:匹配數字字元
grep –n 『[0-9]』 regular.txt
[^list]
匹配字符集以外的字元
例如:grep –n 『[^o]『 regular.txt
匹配非o字元
\前面的字元重複n1,n2次
例如:匹配google,gooogle。
grep –n 『go\gle』 regular.txt
\單詞是的開頭。
例如:匹配以g開頭的單詞
grep –n 『\
word\>
匹配單詞結尾
例如:匹配以tion結尾的單詞
grep –n 『tion\>』 regular.txt
grep一般情況下支援基本正規表示式,可以通過引數-e支援擴充套件正規表示式,另外grep單獨提供了乙個擴充套件命令叫做egrep用來支援擴充套件正規表示式,這條命令和grep -e等價。雖然一般情況下,基本正規表示式就夠用了。特殊情況下,複雜的擴充套件表示式,可以簡化字串的匹配。
擴充套件正規表示式就是在基本正規表示式的基礎上,增加了一些元資料。
元資料意義和範例 +
重複前面字元1到多次。
例如:匹配god,good,goood等等字串。
grep –ne go+d』 regular.txt
?匹配0或1次前面的字元
例如,匹配gd,god
grep –ne 『go?d』 regular.txt
|或(or)的方式匹配多個字串
例如:grep –ne 『god|good』 regular.txt
匹配god或者good。
()匹配整個括號內的字串,原來都是匹配單個字元
例如:搜尋good或者glad
grep –ne 『g(oo|la)』 regular.txt
()前面的字元重複0到多次。
例如匹配gle,gogle,google,gooogle等等
grep –ne 『go*gle』 regular.txt
[:alnum:]
文字數字字元
[:alpha:]
非數字字元字元
[:digit:]
數字字元
[:graph:]
非空字元(非空格、控制字元)
[:lower:]
小寫字元
[:cntrl:]
控制字元
[:print:]
非空字元(包括空格)
[:punct:]
標點符號
[:space:]
所有空白字元(新行,空格,製表符)
[:upper:]
大寫字元
[:xdigit:]
十六進製制字元
1、顯示/proc/meminfo檔案中以大小寫s開頭的行;
grep [ss] /proc/meminfo
2、取出預設shell為非bash的使用者;
grep -v 'bash' /etc/passwd
3、取出預設shell為bash的且其id號最大的使用者;
grep 'bash' /etc/passwd | cut -d: -f3 |sort |tail -1
4、顯示/etc/rc.d/rc.sysinit檔案中,以#開頭,後面跟至少乙個空白字元,而後又有至少乙個非空白字元的行;
grep '^#[[:space:]]\[[:space:]]\' /etc/rc.d/rc.sysinit
5、顯示/boot/grub/grub.conf中以至少乙個空白字元開頭的行;
grep '^[[:space:]]\' /boot/grub/grub.conf
6、找出/etc/passwd檔案中一位數或兩位數;
grep '\<[0-9]\\>' /etc/passwd
7、找出ifconfig命令結果中的1到255之間的整數;
ifconfig eth0|egrep '2[0-5][0-5]|1[0-9][0-9]|[1-9][0-9]|[0-9]'
8、檢視當前系統上root使用者的所有資訊;
grep '\' /etc/passwd
9、新增使用者bash和testbash、basher,而後找出當前系統上其使用者名稱和預設shell相同的使用者;
grep '^\([[:alpha:]]\\.*\1$' /etc/passwd
10、找出netstat -tan命令執行的結果中以「listen」或「established」結尾的行;
netstat -tan |egrep 'listen|established[[:space:]]\$'
11、取出當前系統上所有使用者的shell,要求:每種shell只顯示一次,且按公升序顯示;
grep與正規表示式
grep命令 功能 輸入檔案的每一行中查詢字串。基本用法 grep acinv color auto a n b n 搜尋字串 檔名 引數說明 a 將二進位制文件以文字方式處理 c 顯示匹配次數 i 忽略大小寫差異 n 在行首顯示行號 a after的意思,顯示匹配字串後n行的資料 b before...
grep與正規表示式
正規表示式只是字串的一種描述,只有和支援正規表示式的工具相結合才能進行字串處理。本文以grep為例來講解正規表示式。grep命令 功能 輸入檔案的每一行中查詢字串。基本用法 grep acinv color auto a n b n 搜尋字串 檔名 引數說明 a 將二進位制文件以文字方式處理 c 顯...
grep與正規表示式
grep 及正規表示式 文字查詢的需要,grep,egrep,fgrep grep 根據模式,去搜尋文字,並將符合模式的文字行顯示到螢幕 pattern 文字字元和正規表示式的元字元組合而成的匹配條件 grep options pattern file.grep color root etc pas...