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

--

-

相关文章
相关标签/搜索