前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则表达式及grep命令

正则表达式及grep命令

作者头像
端碗吹水
发布2020-09-23 10:10:52
3930
发布2020-09-23 10:10:52
举报
文章被收录于专栏:程序猿的大杂烩

笔记内容:

l 9.1 正则介绍_grep上

l 9.2 grep中

l 9.3 grep下

笔记日期:2017.8.17

9.1 正则介绍_grep上

wKioL1nkIWbhuIF_AAt86H5NvSE672.png
wKioL1nkIWbhuIF_AAt86H5NvSE672.png

正则就是各种各样的字符组合在一起形成的一串有规律的字符串,编程语言、shell脚本都需要用到正则表达式,可以利用正则来完成一些复杂的需求。

  学习正则需要用到四个工具grep、egrep、sed、awk,其中egrep是grep的扩展,这俩者通常被归类为同一个工具。学好正则对编写shell脚本有很大的帮助。

wKiom1nkJCGyswIwAAmkF7sLtA8894.png
wKiom1nkJCGyswIwAAmkF7sLtA8894.png

grep最简单的用法就是后面加一个字符串,然后匹配含有这个字符串的行:

wKiom1nkJCWiAQsGAAdjX4TX9WQ970.png
wKiom1nkJCWiAQsGAAdjX4TX9WQ970.png

在CentOS7中grep自带了--color=auto选项:

wKioL1nkIW-g0Sj-AAFq6JZff5o177.png
wKioL1nkIW-g0Sj-AAFq6JZff5o177.png

-c选项查看行数:

wKioL1nkIXCyUJMyAAGOZxAA378830.png
wKioL1nkIXCyUJMyAAGOZxAA378830.png

-n选项显示行号:

wKiom1nkJCmyQSH6AAdjX10gYOU647.png
wKiom1nkJCmyQSH6AAdjX10gYOU647.png

-i选项不区分大小写查看:

wKiom1nkJCzCoM96AAexbaL8BY4018.png
wKiom1nkJCzCoM96AAexbaL8BY4018.png

-v选项是取反:

wKioL1nkIZGBd7N1AAO_mqtz-IE181.png
wKioL1nkIZGBd7N1AAO_mqtz-IE181.png

-r选项把一些子目录下面的文件进行遍历:

wKioL1nkIZaSu7EnAAy1M2SHAH0328.png
wKioL1nkIZaSu7EnAAy1M2SHAH0328.png

把root目录下含有root字符串的文件都列出来了

-A选项后面跟数字就会列出指定字符所在行下的n行:

wKiom1nkJE_BxzR2AAUNqPUmImM599.png
wKiom1nkJE_BxzR2AAUNqPUmImM599.png

-B选项则是相反,列出指定字符所在行上的n行:

wKioL1nkIZqgUku_AAL0GPCz3JQ419.png
wKioL1nkIZqgUku_AAL0GPCz3JQ419.png

-C选项是列出指定字符所在行上下n行:

wKiom1nkJFHAWvJMAAQYzkqKGfI402.png
wKiom1nkJFHAWvJMAAQYzkqKGfI402.png
wKioL1nkIaTQ_dVlABLsCl5bKdY182.png
wKioL1nkIaTQ_dVlABLsCl5bKdY182.png

9.2 grep中

wKioL1nkIamCSXWtAAhwQIpWZxA775.png
wKioL1nkIamCSXWtAAhwQIpWZxA775.png

要注意的是所谓0-9不是说0到9的基数的意思,是指包含0-9的字符串,比如956包含了9、5、6这三个字符,就会被列出来。

  加-v选项就是显示不包含0-9的行,也可以理解为把不包含数字的行列出来:

wKioL1nkIeXRDe5lAAGID101a4M399.png
wKioL1nkIeXRDe5lAAGID101a4M399.png

^#表示列出以#号开头的行,所以^就是表示某个字符开头的行:

wKiom1nkJJ7x1MyqAAdsCAF5oVQ480.png
wKiom1nkJJ7x1MyqAAdsCAF5oVQ480.png

加-v选项就可以过滤掉#号开头的行:

wKioL1nkIemDfXf2AAE_LwoFG_s064.png
wKioL1nkIemDfXf2AAE_LwoFG_s064.png

[^0-9]表示非0-9,会把内容列出来然后0-9之外的字符都会显示颜色:

wKioL1nkIjOgg5G0AAibmbU4vKQ120.png
wKioL1nkIjOgg5G0AAibmbU4vKQ120.png

9.3 grep下

  . 表示匹配任意的单个字符的行:

wKiom1nkJOnRTc0PAAKt_q7Xl-g372.png
wKiom1nkJOnRTc0PAAKt_q7Xl-g372.png

* 则表示匹配任意个字符的行:

wKiom1nkJKiy6fWkAAjyXHexnQM244.png
wKiom1nkJKiy6fWkAAjyXHexnQM244.png

.* 贪婪匹配,会匹配所有的,类似于通配:

wKiom1nkJQvytIfYAApErp5X0-w894.png
wKiom1nkJQvytIfYAApErp5X0-w894.png

{}可以用数字指定前面那个字符的重复范围,但是要加上脱义符:

wKiom1nkJZnx2XrmAAPl7YKE1zI324.png
wKiom1nkJZnx2XrmAAPl7YKE1zI324.png

如果不想写脱义符可以加个-E选项或者使用egrep:

wKioL1nkIuWidWlrAALQJL3q5jI177.png
wKioL1nkIuWidWlrAALQJL3q5jI177.png
wKioL1nkIuWTeWfYAAMR4d5JTkE800.png
wKioL1nkIuWTeWfYAAMR4d5JTkE800.png

+和*有点相似,表示匹配字符出现1次上的行,而*号则是0次也算,使用+需要加上脱义符,不想使用脱义符就用egrep:

wKiom1nkJZzTsPUvAALUsasQGTU274.png
wKiom1nkJZzTsPUvAALUsasQGTU274.png

?表示字符重复次数为0或1:

wKiom1nkJaCRKrTEAAkmb-9EI_8569.png
wKiom1nkJaCRKrTEAAkmb-9EI_8569.png

| 是或者的意思:

wKioL1nkIu3DyYhDAAeOuC9hfFY480.png
wKioL1nkIu3DyYhDAAeOuC9hfFY480.png

()是表示组合的意思:

wKioL1nkIu7wo4p0AARiXjv9-RY924.png
wKioL1nkIu7wo4p0AARiXjv9-RY924.png

扩展

把一个目录下,过滤所有*.php文档中含有eval的行

grep -r --include="*.php" 'eval' /data/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/10/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.1 正则介绍_grep上
  • 9.2 grep中
  • 9.3 grep下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档