概念:它使用單個字符串來描述或匹配一系列符合某個句法則規則的字符串; 正則表示式一般用來檢索和替換那些符合某個模式的文本內容。 不管是查找某個文檔,仍是查詢某個日誌文件並分析其內容,都會用正則表示式。 正則就是一串有規則的字符串; 掌握好正則對於編寫shell腳本有很大幫助; 各類變成語言中都有正則,原理是同樣的。 命令格式:grep [-cinvrABC] 'word' filename 經常使用選項以下: -c 表示打印符合要求的行數; -i 表示忽略大小寫; -n 表示輸出符合要求的行及其行號; -v 表示打印不符合要求的號; -r 遍歷全部的子目錄 -A 後面跟一個數字,例如-A2表示打印符合要求的行及下面的兩行; -B 後面跟一個數字,例如-B2表示打印符合要求的行及上面的兩行; -C 後面跟一個數字,例如-C2表示打印符合要求的行及上下各兩行。 ^ 這個符號表示以什麼什麼開頭。如:^# 以#開頭; 或者[^#] 取反,除#號開頭的行
[root@localhost /]# mkdir grep #建立一個grep目錄
[root@localhost /]# cd /grep/ #進這個目錄裏面
[root@localhost grep]# cp /etc/passwd . #拷貝passwd到.(本目錄下)
[root@localhost grep]# ls #查看目錄下有什麼文件
passwd正則表達式
過濾passwd文件裏,nologin的字符shell
這裏nologin過濾完後標紅,是由於grep有一個--color=auto 添加顏色顯示
能夠查看下grep命令
[root@localhost grep]# which grep #which查看grep
alias grep='grep --color=auto'
/usr/bin/grepbash
[root@localhost grep]# grep -c 'nologin' passwd #-c符合’nologin'的行數
15ssh
grep顯示這個文件包包含‘nologin'的行數。post
[root@localhost grep]# grep -n 'nologin' passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:997:User for polkitd:/:/sbin/nologin
17:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
18:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
19:chrony:x:998:996::/var/lib/chrony:/sbin/nologinspa
grep不區分大小寫顯示出來 -ni.net
grep取反,除了nologin的顯示出來 -v3d
遍歷全部的子目錄 -r日誌
[root@localhost grep]# grep -r 'root' /etc/ (etc目錄下全部包含root的文件列出來)
code
-A2把包含root的行,以及這行下面的兩行都打印出來。
[root@localhost grep]# grep -nA2 'root' passwd
-B2把包含root的行,以及這行下面的兩行都打印出來。
[root@localhost grep]# grep -nB2 'root' passwd
[root@localhost grep]# grep -nC2 'root' passwd
[root@localhost grep]# grep '[0-9]' passwd
[root@localhost grep]# grep -nv '[0-9]' /etc/inittab
[root@localhost grep]# grep -nv '^#' inittab
把不是以#開頭的行,顯示出來
過濾出任意一個字符和重複字符,示例以下:
[root@localhost grep]# grep 'r.o' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
.表示任意一個字符,上例中,r.o表示r與o之間有一個任意字符的行過濾出來。
[root@localhost grep]# grep 'o{2}' passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
這裏用到了符號{}表示內部爲數字,表示前面的字符要重複的詞數。
{}左右都須要加上轉義字符\,另外使用{}還能夠表示一個範圍,具體格式爲{n1,n2}
{}花括號表示前一個字符的範圍,若是o{2},表示2個連續的oo顯示出來。
[root@localhost grep]# egrep 'o+b' passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
[root@localhost grep]# egrep 'o?1o' passwd
bin:x:1o:1:bin:/bin:/sbin/nologin
o1o
[root@localhost grep]# egrep 'root|nologin' passwd
. 表示任意一個字符 * 表示零個或者多個字符 {} 表示一個範圍 + 表示一個或多個任意字符 ? 表示零個或多個任意字符 | 表示或者