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

正则表达式

发布时间:2020-12-13 22:32:35 所属栏目:百科 来源:网络整理
导读:一、grep(文本搜索工具):根据用户指定的模式,对目标文件进行过滤,显示被模式匹配到的行。 使用格式:grep [选项] ‘模式’ 文件名 -o 仅显示匹配到的内容,不会把正行输出 -v 反向选取,把没有匹配到的行显示出来 --color 高亮显示匹配到的内容 -i 忽略


一、grep(文本搜索工具):根据用户指定的模式,对目标文件进行过滤,显示被模式匹配到的行。

使用格式:grep [选项] ‘模式’ 文件名

-o 仅显示匹配到的内容,不会把正行输出

-v 反向选取,把没有匹配到的行显示出来

--color 高亮显示匹配到的内容

-i 忽略字符大小写

-E 使用扩展正则表达式

-A # 匹配模式及其下面#行

-B #匹配模式及其上面#行

-C #匹配模式及其上面#行和下面#行

模式(正则表达式):由一类字符书写的模式,其中有一些字符不表示字符字面的意义,而是表示通配功能。

1、基本正则表达式 元字符:

. 匹配任意单个字符

[] 匹配指定集合内的任意单个字符

[0-9] [[:digit:]] 数字集合

[a-z] [[:lower:]] 小写字母集合

[A-Z] [[:upper:]] 大写字母集合

[a-zA-Z] [[:alpha:]] 大小写字母

[0-9a-zA-Z] [[:alnum:]] 数字和大小写字面集合

[[:space:]] 空白字符集合

[^] 匹配的是集合外的任意单个字符 例如[^[:lower:]]指的是除小写字母外的任意单个字符

2、匹配次数:用于对其前面紧邻的字符所能出现的次数作出限定。

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

grep ‘x*y’

xy xxy xxxy y


? 匹配其前面字符0此或一次

grep 'x?y'

xy xxy y xxxxy aby


+ 匹配其前面字符至少出现一次

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

grep 'x{2}y'

xy xxy y aaxxy aby xxxy

{m,n}:匹配其前面的字符至少出现m次,至多出现n次

x{3,5}


3、位置锚定

^:行首锚定,写在模式的最左侧

例:显示/etc/fstab文件中以#开头的行

wKioL1UqesWxrCpJAAFVaDWCwz4526.jpg

$:行尾锚定,写在模式的最右侧

例:显示/etc/fstab文件中以0结尾的行

wKioL1Uqe0-hueEPAAE5jifCDaY574.jpg

^$:空白行(连空格都没有)

例:显示/etc/fstab文件中的空白行

wKiom1UqeiXR1rFbAABYvTyY3jE059.jpg

&; 词首锚定

例:&;open 以open开头的单词

&; 词尾锚定

&;单词&; 单词锚定

例:匹配/tmp/sort文件中的两位数

wKiom1UqfcOQM_yFAABgYcN8fx8742.jpg

4、分组:()

后向引用:反向引用,指把匹配出来的组引用到表达式本身其它地方 () 1 2

选择字符:|


练习1、显示/proc/meminfo文件中以大写或小写S开头的行;

wKioL1UqgK3D4J0tAAEjbDieG8w250.jpg


练习2、显示/etc/passwd文件中其默认shell为/sbin/nologin的用户;

wKiom1UqgDKg-6j2AAB6PkSDypE912.jpg


练习3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

进一步:仅显示上述结果中其ID号最大的用户;

wKioL1UqgmGT33WEAACApCkYEJg332.jpg


练习4、找出/etc/passwd文件中的一位数或两位数;

wKioL1Uqg0mTUYJYAAJ7iR3zTKo333.jpg


练习5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

wKiom1UqgzPA6PeDAAF0OebChdA842.jpg


练习6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

wKiom1Uqg-OyGgDGAAGA_N4NSIw845.jpg


练习7、找出netstat -tan命令执行结果中以'LISTEN'(后可有空白字符)结尾的行;

wKioL1UqhgWC4t7lAAFpUM0a9fE764.jpg


练习8、添加用户bash,testbash,basher,nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认shell相同的用户;

wKioL1Uqi9awWBFcAACTPb-_aUs114.jpg


练习9、扩展题:新建一个文本文件,假设有如下内容:

He like his lover.

He love his lover.

He like his liker.

He love his liker.

找出其中最后一个单词是由此前某单词加r构成的行。

wKiom1UqjPjgzCPVAACIeHCm_lw439.jpg


二、扩展正则表达式

egrep [选项] ‘模式’ 文件名

1、元字符

. 匹配任意单个字符

[] 匹配指定集合内的任意单个字符

[0-9] [[:digit:]] 数字集合

[a-z] [[:lower:]] 小写字母集合

[A-Z] [[:upper:]] 大写字母集合

[a-zA-Z] [[:alpha:]] 大小写字母

[0-9a-zA-Z] [[:alnum:]] 数字和大小写字面集合

[[:space:]] 空白字符集合

[^] 匹配的是集合外的任意单个字符

2、匹配次数:用于对其前面紧邻的字符所能出现的次数作出限定

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

? 匹配其前面字符0此或一次

+ 匹配其前面字符至少出现一次

{m} 匹配其前面字符m此

{m,n}:匹配其前面的字符至少出现m次,至多出现n次

3、位置锚定

^:行首锚定,写在模式的最左侧

$:行尾锚定,写在模式的最右侧

^$ 空白行

&; 词首锚定

&; 词尾锚定

&;单词&;单词锚定

4、分组

()

'([0-9]) ([a-z]) 1 2'

| 选择字符

练习10:显示当前系统上root、centos或user1用户的默认shell及用户名;

wKioL1UrPtqS6539AACP0utQxG8980.jpg

练习11:找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号"()"的行;

wKiom1UrPbuD7HiiAADTOF9c8Eg374.jpg

练习12:使用echo输出一个路径,而使用egrep取出其基名;

wKiom1UrRG3wwyHuAACM3X3QVMs507.jpg

练习13:找出ifconfig命令结果中的1-255之间的数值

wKiom1UrR-zR_sWHAAJ8--jORdc916.jpg

练习14:找出ifconfig命令结果中的IP地址;(ip范围1.0.0.1 - 223.255.255.254)

ifconfig|grep --color '&;([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-2][0-3]).([0-9]|[1-9][0-9]||1[0-9][0-9]|2[0-5][0-5]).([0-9]|[1-9][0-9]||1[0-9][0-9]|2[0-5][0-5]).([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-4])&;'

wKioL1UrS12juhlnAAHcIk1kjtE903.jpg

(编辑:李大同)

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

    推荐文章
      热点阅读