26.正則介紹 grep上 中 下

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

--

-

相關文章
相關標籤/搜索