正則介紹_grepshell
正則就是一串有規律的字符串編程
各類編程語言中都有正則,原理是同樣的。編程語言
grep/egrep sed awk 是shell腳本「三劍客」server
grep (-c -i -n -v -r -A -B -C )字符串
-c 行數 -n 行號it
-i 不區分大小寫awk
-v 取返原理
-r 把子目錄和孫目錄下面全部的文件遍歷一遍sed
若是不加-r 配置
-A後邊跟數字,過濾出符合要求的行以及下面n行
-B後邊跟數字,過濾出符合要求的行以及上面n行
-c後邊跟數字,過濾出符合要求的行以及上下各n行
grep/egrep示例
[root@serverlooker-01 grep]# grep '[0-9]' passwd
[0-9] 表示方括號裏面的任意一個字符
[root@serverlooker-01 grep]# grep -v '[0-9]' passwd
只要帶數字的都不要
(:set nu 加上行號,方便查看)
---
以#開頭的行
[root@serverlooker-01 grep]# grep -n '^#' /etc/inittab
把文件拷貝到當前目錄下 [root@serverlooker-01 grep]# cp /etc/inittab ./
改動一下當前目錄下的inittab (不要改etc下的,可能會致使系統啓動不了)
(把15行過濾出來了)
之後看能會看不少跟服務相關的配置文件,配置文件裏會有不少以#開頭的行,是爲了解釋說明,因此看起來可能會很亂,因此能夠用這種方法過濾。
--
放到[ ] 裏面,是方括號裏面字符的反義,和放到外面是不同的。表示取 非
[root@serverlooker-01 grep]# grep '[^0-9]' inittab
以非數字開頭的行,列出來
[root@serverlooker-01 grep]# grep '^[^0-9]' inittab
以數字開頭的行:
---
. 表示任意的一個字符。
* 表示 :*左邊的字符重複0-n次
.* 表示任意一個任意字符
[root@serverlooker-01 grep]# grep '.*' passwd
---
[root@serverlooker-01 grep]# grep '{2}' passwd
這樣寫不表示任何意義,就表示一個花括號。在正則當中{ }用來表示一個範圍,真正的寫法:
[root@serverlooker-01 grep]# grep 'o{2}' passwd 表示o出現2次,但直接這樣寫不識別,須要作一個脫義:[root@serverlooker-01 grep]# grep 'o\{2\}' passwd
還能夠表示一個範圍: ({}表示前面這個字符的重複範圍)
若是不想寫\,能夠用egrep 或者grep -E
表示一個總體:
+ 表示+前面這個字符的1次或者屢次,(*是0次或屢次)
[root@serverlooker-01 grep]# grep 'o\+o' passwd
?表示 ?前面字符的0次或1次重複
| 表示或者,能夠寫多個
---
以下這些特別重要:
.
*
.*
+
?
^
$
---
OK.