文字搜尋必學命令-grep egrep fgrep用法以及正則表示式
阿新 • • 發佈:2019-01-01
一、grep、egrep、fgrep命令
1.1、基本定義:
1.2、命令基本用法
- -a :在二進位制檔案中,以文字檔案的方式搜尋資料
- fg:在/etc/inittab內搜尋包含rc字串的行
- grep -a 'rc' /etc/inittab
- -c :計算找到'搜尋字串'的次數
- -i :忽略大小寫
- -v :反向查詢,即顯示沒有'搜尋字串'內容的那行
- -o :只顯示被模式匹配的字串
- -n :輸出行號
- --colour(color):顏色顯示
- -A:顯示匹配到字元那行的後面n行
- -B:顯示匹配到字元那行的前面n行
- -C:顯示匹配到字元那行的前後n行
二、正則表示式
2.1、基本定義:
2.2、正則表示式詳細介紹
2.2.1、基本的正則表示式:
- . :匹配任意單個字元
- fg:查詢包含student且student後面帶一個字元的行
- grep ‘student.’ /etc/passwd //模式可以用單引號和雙引號,如果模式中要做變數替換時則
- 必須用雙引
- []:匹配指定範圍內的任意單個字元,[abc],[a-z],[0-9],[a-zA-Z]
- fg:查詢帶有數字的行
- grep ‘[0-9]’ /etc/passwd
- [^]:匹配指定範圍外的任意單個字元
- fg:查詢沒有小寫字母的行。
- grep ‘[^a-z]’ /etc/inittab
- [:space:]:表示空白字元
- [:punct:]:表示所有標點符號的集合
- [:lower:]:表示所有的小寫字母
- [:upper:]:表示所有的大寫字母
- [:alpha:]:表示大小寫字母
- [:digit:]:表示數子
- [:alnum:]:表示數字和大小寫字母-----使用格式[[:alnum:]]等
- * :匹配其前面的字元任意次
- fg:查詢root出現0次或0次以上的行
- grep ‘root*’ /etc/passwd
- .* :任意字元
- fg:查詢包含root的行
- grep 'root.*' /etc/passwd
- \?:匹配其前面的字元1次或0次
- \{m,n\} :匹配其前字元最少m,最多n次)
- ^:錨定行首,此字元後面的任意內容必須出現在行首
- fg:查詢行首以#開頭的行
- grep '^#' /etc/inittab
- $:錨定行尾,此字元前面的任意內容必須出現在行尾
- fg:查詢行首以root結尾的行
- grep 'root$' /etc/inittab
- ^$:錨定空白行,可以統計空白行
- \<或者\b:錨定詞首,其後面的任意字元必須做為單詞首部出現
- fg:查詢root且root前面不包含任何字元的行
- grep '\<root' /etc/man.config
- \>或者\b:錨定詞尾,其前面的任意字元必須做為單詞尾部出現
- fg:\<root\> 查詢root單詞 grep "\<root\>" =grep "\broot\b"
2.2.2、擴充套件的正則表示式:
- * :匹配其前面字元的任意次
- ?:匹配其前面字元的0此或著1此
- + :匹配其前面字元至少1此
- fg:至少一個空白符: '[[:space:]]+'
- {m,n} :匹配其前面字元m到n次
- | : 代表或者的意思。
- fg:grep -E 'c|cat' file:表示在檔案file內查詢包含c或者cat
- \.:\表示轉義字元,此表示符號.
三、grep命令利用小例項
- (1)顯示/etc/inittab 中以#開頭,且後面跟一個或者多個空白符,而後又跟了任意非空白符的行
- grep '#[[:space:]]*[^[:space:]]' /etc/inittab
- (2) 輸出不是數字開頭的行
- grep '^[^0-9]’ /etc/passwd
- (3)輸出行首是1或2
- grep '^\(1\|2\)' /etc/inittab或grep -E '^(1|2)' /etc/inittab
- (4)查詢前面是rc中間接任意字元而後跟/rc
- grep '.*\(rc\).*\/\1.*' /etc/inittab
- (5)取出當前電腦上的IP
- ifconfig |grep -A 1 "^eth0" |grep "\<[0-9.]\{1,\} |cut -d: -f2
- (6)查詢當前系統上名字為student(必須出現在行首)的使用者賬戶的相關資訊,檔案為/etc/passwd
- grep "^student" /etc/passwd
- (7)顯示/proc/meminfo檔案中以不區分大小寫的s開頭的行
- grep -i '^s' /proc/meminfo或者 grep '^[sS]' meminfo
- (8) 顯示/etc/inittab 中以#開頭,且後面跟一個或者多個空白符,而後又跟了任意非空白符的行
- grep '^#[[:space:]]*[^[:space:]]' /etc/inittab
- (9) 顯示/boot/grub/grub.conf檔案中以一個或者多個空白符開頭的行
- grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf
- (10)顯示/etc/inittab檔案中以一個數字開頭並以一個與開頭數字相同的數字結尾的行
- grep '^\([0-9]\).*\1$' /etc/inittab 或者 grep '^\([[:digit:]]\).*\1$' /etc/inittab
- (11)找出ifconfig命令結果中的1-255之間的整數
- ifconfig | egrep '\b[0-9][0-9]\b?|\b1[0-9][0-9]\b|\b2[0-4][0-9]\b|\b25[0-5]\b' --color