linux grep原理,Linux:grep和Egrep详解

1.grep是什么?

grep全称是Global search regular expression and print out the line,全局搜索正则表达式,简称grep,它能根据用户指定的文本模式对目标文件进行逐行搜索,并打印(搜索,删除,替换)能够被模式匹配的行。常见的有grep,Egrep,Fgrep,而Egrep可以使用grep -E命令实现,Fgrep可以使用grep -F来实现。这里只介绍grep和Egrep,Egrep比起grep相差并不大,Egrep的功能比grep强大一点点,还有一点使用格式上的区别,而能用grep实现的都能用Egrep实现,反之亦然。

2.如何使用?

grep的使用格式是

grep [options] PATTERN file...

(egrep [options] PATTERN file...)

grep的常用选项有:

-v:取反,显示不能被模式匹配到的行

-o:仅显示被模式匹配到的字符,而不是显示整行

-i:不区分模式匹配中的大小写字母

-E:就是egrep啦!!!

-A#:(after)显示被模式匹配到的后#行,如-A2,则取被模式匹配到的当前行的后两行

-B#:(before),同上

-C#:(after and before),同上

gerp和egrep的区别如下,颜色不同的为他们的区别:

模式说明gerp模式标志Egerp模式标志

匹配任意单个字符.(英文标点).(英文标点)

匹配中括号里面的任意单个字符[]如:[abc],匹配abc中的任意一个[]如:[abc],匹配abc中的任意一个

匹配中括号里面以外的任意单个字符[^]如:[^abc],不匹配abc[^]如:[^abc],不匹配abc

匹配其前一个字符任意次*如:x*y,表示x和y之间出现*如:x*y,表示x和y之间出现

匹配任意长度的任意字符.*如:x.*y,表示x和y中间出现任意改字符.*如:x.*y,表示x和y中间出现任意改字符

匹配其前面的字符一次或0次\?如:x\?y,表示xy或y?如:x?y,表示xy或y

精确匹配前面字符出现的次数\{m\}如:a\{5\},匹配5次a{m}如:a{5},匹配5次a

最少匹配前面字符出现的次数\{m,\}如:a\{5,\},最少匹配5次a{m,}如:a{5,},最少匹配5次a

最多匹配前面字符出现的次数\{0,n\}如:a\{0,5},最多匹配5次a{0,m}如:a{0,5},最多匹配5次a

分别最少和最多匹配前面字符出现的次数\{m,n\}如:a\{3,5\},最少匹配3次a,最多匹配5次a{n,m}如:{3,5},前面的字符至少出现3次,最少出现5次

^锚定行首^root,以root开头的行^root,以root开头的行

$锚定行尾bash$,以bash结尾的行bash$,以bash结尾的行

锚定词首\

锚定词尾\>,如:a\>,以a结尾的单词\>,如:a\>,以a结尾的单词

分组\(a,b\)主要用于后向引用(ab)主要用于后向引用

后向引用\number,如:\(ab\)*xy\1,引用第一个括号中的内容\number,如:(ab)*xy\1,引用第一个括号中的内容

+:匹配前面的字符最少一次不能使用该模式如:a+b,至少匹配a一次

|:或者不能使用该模式如:a|b,a或者b

空白,包括空格键和tab建的空白[[:space:]][[:space:]]

数字[[:digit:]]或者[0-9][[:digit:]]或者[0-9]

3.实际示例:

1.显示/proc/meminfo文件中以大小写s开头的行

命令:grep --color=auto "^[Ss]" /proc/meminfo

注意:--color=auto 是指定颜色的,这样看比较方便,"^[Ss]" :被匹配的模式需要加上双引号或单引号

6c77ff2d22aff79b0c17005112e8e2de.png

2.显示/proc/meminfo文件中不以大小写s开头的行

-v 是取反的意思

grep -v --color=auto "^[Ss]" /proc/meminfo

d1aa023635373f759e435e61ce2c6fb9.png

3.显示/proc/meminfo文件中以大小写s开头的字符

-o

grep -o --color=auto "^[Ss]" /proc/meminfo

ab080314ace8ba70bac36f4289057baf.png

4.显示/proc/meminfo文件中以大小写s开头的行

-i

grep --color=auto -i "^s" /proc/meminfo

d24990b072a8e18029ce58314a8e35d4.png

5.显示/proc/meminfo文件中以大小写s开头的行的前一行

-A#(#为指定行数)

-B#(#为指定行数),指定行数的前#行

-C#(#为指定行数),C包含A和B

grep --color=auto -A1 -i /proc/meminfo

c066aacb42188f2abac4e4dd285e0ada.png

6.取出默认shell为非bash的用户信息

grep --color=auto -v "bash\>" /etc/passwd

4f3a7563443e00d7cb98d25dedc0b643.png

7.显示/boot/grub/grub.conf中以至少一个空白字符开头的行

grep --color=auto "^[[:space:]]\{1,\}" /boot/grub/grub.conf

egrep --color=auto "^[[:space:]]{1,}" /boot/grub/grub.conf

4e7d8ac8743b1cc36c753e5f10f8d167.png

8.找出/etc/passwd中文件中一位数或两位数

grep --color=auto "\

egrep --color=auto "\

ce9247f82518a59bfe73cbcbd00a6519.png

9.写一个模式,能匹配真正意义上的ip地址

ifconfig | egrep --color=auto"\

cae20e3bc586229c37e2c6f2d1dff7d5.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值