㈠首先我們要明白grep和egrep的干什么用的
grep:global search regular RE ) and print out the line,全面搜索正則表達式并把行打印出來,是一種強大的文本搜索工具,它只能用基本的正則表達式來搜索文本,并把匹配的行打印出來。
egrep:命令等同于grep -E,利用此命令可以使用擴展的正則表達式對文本進行搜索,并把符合用戶需求的字符串打印出來。
為了使大家看的明白我就使用大白話:
grep命令的使用格式:grep+選項+'某種模式'+你索要查詢的內容路徑:(選項可以忽略)
①例:我要查找/etc/rc.d/rc.sysinit 有boot字符的行 :grep –colour=auto 'boot' /etc/rc.d/rc.sysinit
為了我們便于查看,所以我 使用了–colour=auto的選項,就是把結果以不同顏色顯示出來。大家可以試著去查看下效果。
那么grep常用選項有那些?下面我們介紹下grep的常用選項
⑴ -v : 取反,就是顯示出與查找條件相反的結果
②例我要查找/etc/passwd中以/bin/bash結尾的行:
[root@localhost ~]# cat /etc/passwd | grep '/bin/bash$'
root:x:0:0:root:/root:/bin/bash
那么不以/bin/bash結尾的呢?
[root@localhost ~]# cat /etc/passwd | grep -v '/bin/bash$' | head -1
bin:x:1:1:bin:/bin:/sbin/nologin
⑵-i:忽略大小寫
③例:我們拿有-i 跟沒-i做比較 例如查找/etc/rc.d/rc.sysinit中有s的字符 因為我黏貼沒有顏色顯示效果,所以我只把命令給大家敲出來
[root@localhost ~]# grep –colour=auto 's' /etc/rc.d/rc.sysinit
[root@localhost ~]# grep -i –colour=auto 's' /etc/rc.d/rc.sysinit
⑶–colour顏色顯示后面常跟auto
⑷-A n :顯示匹配到所在行的后面n行
④例 [root@localhost ~]# grep -A1 '/bin/bash$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
⑸-Bn:顯示匹配到所在行前面的n行
⑹-Cn:顯示匹配到所在行的前后各n行
⑺-n :給顯示匹配的行以行號
⑤例 [root@localhost ~]# grep -n -A1 '/bin/bash$' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
⑻-c:統計匹配到字符的次數
⑥例 [root@localhost ~]# grep -c 's' /etc/rc.d/rc.sysinit
當然還有好多選項,我們就介紹幾個大家可能常用到的。大家也可能注意到了我命令里面字符串都用了單引號所以需要大家注意在正則表達式里如果有字符串則需要用單或雙引號把它給引起來。如果是變量例如$hh等那么這個變量還有正則對它所做的一些正則表達式的元字符都要用雙引號囊括起來。
㈡那么我們這里還需要知道一個知識點,什么是正則表達式?
正則表達式的基本定義: 正則表達是使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。正則表達式通常被用來檢索、替換那些符合某個模式的文本。
那么常用的正則表達式的元字符都有那些?下面我們給大家一一介紹:
按功能分類:
一:做字符匹配的元字符:
1:.(就是一個點)匹配任意字符
2:[ ]匹配指定范圍里面的任意單個字符
3:[^ ]匹配指定范圍外的任意單個字符(就是除了中括號里面的不能用,別的你隨便)
4:[[:space:]] :空白字符
5:[[:lower:]]:匹配所有的小寫字母
6:[[:upper:]]:匹配所有的大寫字母
7:[[:alpha:]]:匹配所有的大小寫字母
8:[[:digit:]]:匹配所有的數字
9:[[:alnum:]]:匹配所有的數字和大小寫字母
10:[[:punct:]]:所有標點符號
二:做次數匹配:
1:*:任意次
2:.*(點*)任意字符任意次
3:?:前面的字符0次或1次
4:{m}:匹配m次
5:{m,n}:至少m至多n
6:{m,} :至少m次
7:{0,n}:至多n次
三:做位置錨定:
1:^ :錨定行首
2:$ :錨定行尾
3:^$ :空白行
四:單詞的錨定:
1:<:錨定詞首(或者也可以用 )例如:以#號開頭的行:^# 或 #
2:>:錨定詞尾(也可以用#)
但是兩者是有寫區別的例如
⑦例:[root@localhost ~]# grep ' #' /etc/rc.d/rc.sysinit
#remount /dev/shm to set attributes from fstab #669700
#remount /proc to set attributes from fstab #984003
[root@localhost ~]# grep '^#' /etc/rc.d/rc.sysinit
#!/bin/bash
#
#remount /dev/shm to set attributes from fstab #669700
#remount /proc to set attributes from fstab #9
注意:字符跟之間是有空格的只會匹配出#頭后面緊跟字符的行
五:分組:
1:():分組
⑧例:查找/etc/rc.d/rc/sysinit中sys一組的字符行
[root@localhost ~]# grep –colour=auto '(sys)' /etc/rc.d/rc.sysinit
2:1:后向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內容
(a.b)xy1 就是匹配一個a b 之間有任意一個單詞的 xy后面跟a.b一樣的字符
例如acbxy 那匹配結果的單詞就是acbxyacb 1就是把括號內的東西在cp1份放到xy后面
以上就是正則表達式的元字符,如有不合理的地方請大家雅正。
介紹完了grep我們簡單說說egrep,egrep其實就是擴展正則表達式grep -E就相當于egrep
擴展表達式其實就是比正則表達式稍微有一點點的改變,下面我只列出與grep不一樣的地方
字符匹配:
?:匹配前面的字符0或1次
+:匹配前面的字符至少1次
{m}:匹配前面的字符m次
{m,n}:匹配至少m次,至多n次
{m,}:至少m次
{0,n}:至多n次
分組:
():分組
| :或者 ,a|b a或者b (a|b)
以上就是我對grep跟egrep的簡單認識,與大家分享下,歡迎大家雅正及反饋。謝謝!
下一篇:兩個QoS綜合配置案例