加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

grep与egrep用法从基础到高级进阶

发布时间:2020-12-14 01:55:47 所属栏目:百科 来源:网络整理
导读:一、grep 国际音标[grep] grep是shell脚本中的文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能被模式所匹配到的行。 格式: grep [options] 'PATTERN' file,... 常用选项: -v:反向匹配,显示不能被模式所匹配到的行。 -o:仅显示被模

一、grep

国际音标[grep]

grep是shell脚本中的文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能被模式所匹配到的行。

格式:

grep [options] 'PATTERN' file,...

常用选项:

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

-o:仅显示被模式匹配到的字串,而非整行。

-i:不区分大小写,ignore-case

-E:支持扩展正则表达式,Expand

-A:显示匹配行及下一行,after

-B:显示匹配行及上一行,befoe

-C:显示匹配行及上下行

grep基础用法很简单,直接命令+'PATTERN'+文件就好了

例:找出/etc/passwd文件中所有与root有关的行。

[root@nmshuishui ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

要想实现grep的高级用法,须配合正则表达式及管道。那就先讲讲基本正则表达式。

二、基本正则表达式

正则表达式就是一类字符所书写出的模式(pattern),来处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊称号的辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序。

元字符:不表示字符本身的意义,用于额外功能性的描述。

1)字符匹配:

.:匹配任意单个字符

2)次数匹配

* :匹配任意次 如:x*y: xxy xy y

.*:匹配任意长度的任意字符,0次或多次。

?:匹配0次或1次 如:x?y: xy y xxy

xxy是匹配了x 2次,这也能行?当然,因为,grep有贪婪模式,尽可能长的去匹配字符。

{m}:匹配m次 这里的代表转义字符,扩展正则表达式中不用

{m,n}:匹配最少m次,最多n次

{0,n}:匹配至多n次

3)位置锚定: 用于指定字符出现的位置

^:托字符,锚定行首 ^char

$:锚定行尾 char$

^$:空白行 既是行首,又是行尾,当然就是空白行了

&;:锚定词首 &;char bchar 这里的依然是转义

&;:锚定词尾 char&; charb

&;hello&;:既锚定词首又锚定词尾,当然是锚定hello这个单词。

4)分组

() 给括号转义

5)引用

1:前向引用,引用前面的第1个左括号以及与之对应的右括号中的模式所匹配到的内容 (a.b)xy1 --> a6bxya6b

2:前向引用,引用前面的第2个左括号以及与之对应的右括号中的模式所匹配到的内容

三、 小试牛刀:

1)显示/etc/passwd中以r开头的行(锚定行首)

[root@nmshuishui ~]# grep "^r" /etc/passwd
root:x:0:0:root:/root:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

2)显示/etc/passwd中以大小写S开头的行

[root@nmshuishui ~]# grep "^[Ss]" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
shuishui:x:501:501::/home/shuishui:/bin/bash

3)取出默认shell为bash的且其ID为最大的用户

[root@nmshuishui ~]# grep "bash$" /etc/passwd |cut -d: -f1,3 -n|tail -1
user1:508

4)显示/etc/passwd中的一位数或两位数(锚定词首、记尾、分组、转义、次数匹配)

wKioL1MEtS2hM-S7AABW7p6IYPw535.png

5)找出当前系统上用户名和默认shell相同的用户(行首、行尾锚定)

wKiom1MEuPew7zRMAAAZ3gDAch4235.png

6)grep配合其它命令的用法,找出本机的IP地址,只显示IP段(管道、cut)

[root@nmshuishui ~]# ifconfig eth0 | grep "inet addr:" | cut -d: -f2 | cut -d' ' -f1
192.168.1.102

四、egrep 扩展正则表达式

上面提到过了,在扩展正则表达式中不需要转义符

元字符:

1)字符匹配:

.:任意单个字符

[]:指定范围内的任意单个字符

[^]:指定范围外的任意单个字符

2)次数匹配:

*:匹配其前面的字符任意次

?:匹配其前面的字符0次或1次

+:匹配其前面的字符1次或多次

{m}:匹配其前面的字符m次

{m,n}:至少m次,至多n次

{0,n}:至多n次

3)锚定:

^:锚定行首

$:锚定行尾

&;:锚定词首 b

&;:锚定词尾 b

4)分组:

():

| :或者 基本正则表达式中没有|

5)引用:

1:前向引用,引用前面的第1个左括号以及与之对应的右括号中的模式所匹配到的内容

2:前向引用,引用前面的第2个左括号以及与之对应的右括号中的模式所匹配到的内容

五、 扩展正则表达式练习

1)找出ifconfig中1-255之间的整数。

wKioL1MHTSKDxzD1AAA-uGdoV7w700.png

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读