9.1 正則介紹_grep上 (-cinvABC )linux
9.2 grep中 (正則表達式的一些用法,[] ^ ^[^] )正則表達式
9.3 grep下 (正則表達式的一些用法, . * .* egrep grep -E )shell
9.1 正則介紹:編程
什麼是正則vim
~ 正則就是一串有規律的字符串centos
~ 掌握好正則對於編寫shell腳本有很大的幫助bash
~ 各類編程語言中都是正則,原理是同樣的編程語言
~ 本章將要學習grep/egrep、sed、awkpost
egrep是grep的擴展,grep能實現的egrep都能實現學習
grep上:
~1. grep [-cinvABC(如下 的選項)] 'word(關鍵詞)' filename(文件名)
~2. -c 行數
顯示帶關鍵詞的行,有多少行
~3. -i 不區分大小寫
~4. -n 顯示行號
~5. -v 取反
除了關鍵詞,都列出來
~6. -r 遍歷全部子目錄,甚至是孫目錄
在一個目錄下,全部的目錄,所有過濾
~7. -A 後面跟數字,過濾出符合要求的行以及下面 所加數字 的幾行
-A2 即表明 該列出關鍵詞的行以及這一行的下面的兩行
~8. -B 同上,過濾出符合要求的行以及上面n行
~9. -C 同上,同時過濾出符合要求的行以及上下各n行
實例:
1.
[root@axinlinux-01 ~]# mkdir grep
[root@axinlinux-01 ~]# cd grep
[root@axinlinux-01 grep]# cp /etc/passwd .
[root@axinlinux-01 grep]# ls
passwd
[root@axinlinux-01 grep]# grep 'nologin' passwd 在centos7版本,grep自帶顏色選項,關鍵詞標紅
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
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
--
-
2.
[root@axinlinux-01 grep]# grep -c 'nologin' passwd -c選項顯示關鍵詞多少行
15
3.
[root@axinlinux-01 grep]# grep -ni 'nologin' passwd -i選項加上以後不區分關鍵詞的大小寫
2:bin:x:1:1:bin:/bin:/sbin/NOLogin 好比這個大寫的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
4.
[root@axinlinux-01 grep]# grep -n 'nologin' passwd -n選項顯示關鍵詞的行號
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
5.
[root@axinlinux-01 grep]# grep -vni 'nologin' passwd -v選項取反,除了關鍵詞,其餘的都列出來
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
6.
[root@axinlinux-01 grep]# grep -r 'root' /etc/ 後面跟最開始的目錄,etc下全部的目錄都回遍歷
/etc/grub.d/00_header:datarootdir="/usr/share"
/etc/grub.d/00_header:export TEXTDOMAINDIR="${datarootdir}/locale"
/etc/grub.d/00_header:if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT}"` ; then
/etc/grub.d/00_header: font="`make_system_path_relative_to_its_root "${font_path}"`"
/etc/grub.d/00_header:loadfont (\$root)`make_system_path_relative_to_its_root $x`
/etc/grub.d/00_header:set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME`
--
-
[root@axinlinux-01 grep]# grep 'root' /etc/ 不加 -r 就會報錯,後面的/etc是個目錄
grep: /etc/: 是一個目錄
7.
[root@axinlinux-01 grep]# grep -nA2 'root' passwd -A2 列出關鍵詞所在的行,以及改行下面的兩行
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/NOLogin
3-daemon:x:2:2:daemon:/sbin:/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
----------------------------------------------------------------------------------------------------------------------------------------------------
9.2 grep中:
~1. grep '[0-9]' passwd
過濾0-9這些數字(包括大於0-9的組合數字,像99/999等),在passwd這個文件裏面
~2. grep -v '[0-9]' passwd
意思同上,只是取反
~3. grep -v '^#' inittab
列出不已#號開頭的行,在inittab這個文件裏
^#表示已#號開頭
~4. grep '^[^0-9]' inittab
^在方括號裏面表明取非。[^0-9]表示不是0-9的,也就是否是數字的
^在方括號外面,爲以什麼什麼開頭的。^#以#號開頭的
實例:
1.
[root@axinlinux-01 grep]# grep '[0-9]' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
--
-
2.
[root@axinlinux-01 grep]# grep -v '[0-9]' passwd passwd這個文件裏沒有不帶數字的
[root@axinlinux-01 grep]#
3.
[root@axinlinux-01 grep]# grep '^#' inittab
# inittab is no longer used when using systemd.
#
--
- initaab這個文件都是以#號開頭的,咱們vim一下
[root@axinlinux-01 grep]# vim inittab
[root@axinlinux-01 grep]# grep -v '^#' inittab 列出這個文件不已#開頭的行
sdfsdgfsdgsdggsdgdgggg
4.
[root@axinlinux-01 grep]# grep '[^0-9]' inittab 過濾出不是數字的,發現基本上都是紅色的
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
s
1111111asfffafffdf
dfsdgfsdgsdggsdgdgggg
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
--
-
[root@axinlinux-01 grep]# grep '^[^0-9]' inittab 過濾出不是以數字開頭的
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
--
-
----------------------------------------------------------------------------------------------------------------------------------------------------
9.3 grep下:
~1. grep 'r.o' passwd
. 在正則裏表示任意一個字符。r.o表示任意r和o組成的字符,也就是三位的字符
~2. grep ‘o*o' passwd
* 在正則裏面表示任意個字符。o*o表示 o開始的任意個字符,並以o結束的字符。*前面必定要加字符
~3. grep '.*' passwd
.*統配。表示任意一個任意個字符。一般用在過濾 一段以開頭到結尾的段
例如, grep 'chrony.*nologin' passwd 即表示
過濾以chrony開頭,中間爲任意個任意的字符,結尾以nologin結束的
##下面是egrep的用法 (egrep的用法等於grep -E)
~4.egrep / grep -E / grep 'o\{2\}' passwd
{}表示前面字符的重複範圍
可是,要把o與2自己的含義脫意掉。由於不脫意的話,什麼都不顯示
使用-E能夠不用脫意。或使用egrep
#也能夠這樣寫
#egrep '(oo){2}' passwd
#即表示過濾出現2次00的字符
~5.egrep / grep -E / grep 'o\+o' passwd
+表示1次和屢次,跟 * 很想。但+不包括0次。*包括任意次,也包括0次
使用+要脫意前面的字符
或使用egrep,或使用grep -E
~6. egrep / grep -E 'o?o1' passwd
?表示0或1,也就是要麼有要麼沒有
o?o1 表示有o或者沒o,以1結束的字符。需注意的是又或者沒有表示的是前面的字符
~7. egrep / grep -E 'root|nologin' passwd
|表示或者的意思
root|nologin 表示過濾root或者nologin,也能夠理解爲root和nologin
實例:
1.
[root@axinlinux-01 grep]# grep 'r.o' passwd
root:x:0:0:root:/root:/bin/bash
asdas:r3o:asda
sdasdas:rgo:
operator:x:11:0:operator:/root:/sbin/nologin
2.
[root@axinlinux-01 grep]# grep 'o*o' passwd
on:/sbin:/sbin/nologin
nobody:x:99:99:Noboooooooody:/:/sbin/nologin
mail:x:8:12:mail:/var/spooool/mail:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
--
-
3.
[root@axinlinux-01 grep]# grep '.*' passwd 他會過濾出全部
[root@axinlinux-01 grep]# grep 'chrony.*nologin' passwd 過濾以chrony開頭,中間爲任意個任意的字符,結尾以nologin結束的
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
4.
[root@axinlinux-01 grep]# grep 'o\{2\}' passwd 使用grep時,要脫意
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spooool/mail:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
nobody:x:99:99:Noboooooooody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@axinlinux-01 grep]# grep -E 'o{2}' passwd 使用grep -E 可不用脫意
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spooool/mail:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
nobody:x:99:99:Noboooooooody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@axinlinux-01 grep]# egrep 'o{2}' passwd 使用egrep 可不用脫意
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spooool/mail:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
nobody:x:99:99:Noboooooooody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
5.
[root@axinlinux-01 grep]# grep 'o\+o' passwd 使用grep 'o\+o'要脫意
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spooool/mail:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
nobody:x:99:99:Noboooooooody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@axinlinux-01 grep]# egrep 'o+o' passwd 使用egrep 'o+o'不用脫意
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spooool/mail:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
nobody:x:99:99:Noboooooooody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@axinlinux-01 grep]# grep -E 'o+o' passwd 使用grep -E 'o+o'不用脫意
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spooool/mail:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
nobody:x:99:99:Noboooooooody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
6.
[root@axinlinux-01 grep]# egrep 'o?o1' passwd
o1
oo1:wq
oo1
games:x:12:100:games:/usr/games:/sbin/:n:o1:login
ftp:x:14:50:FTP User:/var/ftp:/sbin/nol:o1:gin
nobody:x:99:99:Noboooooooody:/:/sbin/nol:oo1:0gin
ystemd-network:x:192:192:systemd Network Mooo1anagement:/:/sbin/nologin
[root@axinlinux-01 grep]# grep -E 'o?o1' passwd
o1
oo1:wq
oo1
games:x:12:100:games:/usr/games:/sbin/:n:o1:login
ftp:x:14:50:FTP User:/var/ftp:/sbin/nol:o1:gin
nobody:x:99:99:Noboooooooody:/:/sbin/nol:oo1:0gin
ystemd-network:x:192:192:systemd Network Mooo1anagement:/:/sbin/nologin
7.
[root@axinlinux-01 grep]# egrep 'root|nologin' passwd
root:x:0:0:root:/root:/bin/bash
on:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spooool/mail:/sbin/nologin
--
-
[root@axinlinux-01 grep]# grep -E 'root|nologin' passwd
root:x:0:0:root:/root:/bin/bash
on:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spooool/mail:/sbin/nologin
--
-