设为首页 收藏本站
查看: 931|回复: 0

Linux shell基础(四)正则表达式与grep命令 beta-Linux学习之路

[复制链接]

尚未签到

发表于 2018-8-24 08:52:09 | 显示全部楼层 |阅读模式
一、正则表达式
  之前学习find命令时,就已经接触过一些简单的正则,那么我们现在来学习一些复杂的正则。首先,我们还是来复习什么是正则表达式,看这个教程先,一定要多看几遍,至少知道正则大概长什么样子。(转载至https://deerchao.net/tutorials/regex/regex.htm )正则就是有规律的一串字符串,用来描述一个特定的内容,正则适合用来处理字符串,不太适合处理数学逻辑。学好正则对编写shell脚本有很大的好处,所有的shell脚本大部分都涉及到正则表达式。各种编程工具中也需要使用正则。
  用grep sed awk去处理字符串
  能不能写好shell脚本php
  ngix配置文件中也有正则
  正则核心符号
  。一个任意字符


  • 个*  ? 零个或1个

  • 一个或多个  ^ 开头
      # 末尾

二、grep命令

(一)grep命令简介
  

用于过滤文件中的字符,(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。系统本身通过/etc/profile.d目录下的colorgrep.sh文件做了别名==grep --color,能够方便的显示找到的行。  

  用法: grep [选项]... PATTERN [FILE]...
  grep -cniv  ‘关键字(正则)’ 文件路径
  选项
  -i 不区分大小写,默认情况下grep不区分关键字大小写
  -c 行数
  -n 显示关键词所在行号
  -v取反(使用较多)
  -r 遍历所有层级子目录
  -A后面跟数字,过滤出符合要求的行以及下面的n行
  -B后面跟数字,过滤符合要求的行以及上面的n行
  -C后面跟数字,过滤符合要求的行以及上下各n行
  扩展正则 grep -E ==sed -r ==awk
  反复练习,掌握正则表达式
  首先做个准备工作,把/etc/passwd文档拷贝到其他路径下,如/tmp下做试验

(二)基本用法示例
  1、过滤出关键字root所在的行并显示行号。

  grep -n 'root' /etc/passwd

DSC0000.jpg

  可以看到有颜色标识关键字。
  2、统计某一关键字出现的行数

  grep -c 'nologin' passwd

DSC0001.jpg

  下面那个15就是说nologin这个关键字出现了15次
  3、搜索某一关键字出现的行,然后把没有出现关键字的行过滤出来

  grep -vn 'nologin' passwd

DSC0002.jpg

  4、搜索整个文件夹,在文件内容中招root。(注意与find命令找到的东西的区别)

  grep -r 'root' /etc

DSC0003.jpg

  紫色是文件的路径,搜索出来的东西很多,grep把/etc下所有包含root的文件中的root字所在的行和所在的文件信息都列了出来。
  5、-ABC 作用演示,能列出关键字所在的行和临近的行。

  grep -A2 'root' passwd
  grep -B2 'root' passwd
  grep -C2 'root' passwd

DSC0004.jpg

DSC0005.jpg

DSC0006.jpg

  -C选项会把搜到的行的附近的行都列出来,当然如果搜索的目标在头上或者文尾,就不会列相应的行。

grep+正则表达式(regexp)用法举例
  命令写法:grep -(cirvnABC) 'regexp' 文件或目录路径
  精髓在regexp的写法,如何正确的把想要的东西用正则表达出来。
  1、把含有0到9十个数字任意一个字符的行列出来

  grep '[0-9]' passwd

DSC0007.jpg

  取反再搜索下
  没了,说明passwd文件中每一行都带有数字
DSC0008.jpg

  这里说明[0-9]==[0123456789]
  2、把不以#号开头的行打印出来,
  这条命令经常用于查看程序或者系统的配置文件,这种文件经常有大段的以'#'开头的注释行,直接看很麻烦。

  grep -vn '^#' /etc/ssh/sshd_config

DSC0009.jpg

  还是有空行,我们要再把空行过滤掉。

  grep -vn '^#' /etc/ssh/sshd_config|grep -v '^$'

  3、显示test.txt文档中含有r.o关键字的行

  grep 'r.o' test.txt

DSC00010.jpg

  .号表示任意一个字符,a-z,A-Z,0-9,特殊号等等。
  4、搜索test.txt中形如'r*o'的行

  grep 'r*o' test.txt

DSC00011.jpg

  注意这个正则的匹配结果,“r*o”可以代表的东西是只要以零个或任意多个r开头o结尾的字符,ro肯定可以,o也可以因为他表示0个r和1个o,rrro,rro这些肯定可以。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-555769-1-1.html 上篇帖子: linux学习笔记--工程师技术:shell脚本基础 下篇帖子: shell 实现跳板机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表