一、正则表达式

正则表达式:Regual Expression, REGEXP。
由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能;
基本正则表达式:BRE
扩展正则表达式:ERE

1.基本正则表达式的元字符

1.1 字符匹配:

. :匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:] 数字
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 字母
[:alnum:] 数字
[:punct:] 标点符号
[:space:] 垂直或水平的空白字符

1.2 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;

*:匹配前面的字符任意次,包括0次;默认工作在贪婪模式(尽可能长的匹配)
.:任意单个字符
.*:任意长度的任意字符
?:匹配前面的字符0次或1次
\+:匹配前面的字符至少1次
\{n\}:匹配前面的字符n次
\{n,m\}:匹配前面的字符n至m次
  \{n,\}:匹配前面的字符至少n次
  \{,m\}:匹配前面的字符至多m次

1.3 位置锚定:定位要锚定的字符出现的位置

  • ^(脱字符):行首锚定,用于匹配模式的最左侧
  • $:行尾锚定,用于匹配模式的最右侧
    • ^$:空行
    • ^[[:space:]]$:空白行(空行或含有空白字符的行)
    • ^PATTERN$:用于PATTERN来匹配整行
  • \< 或\b 词首锚定,用于单词模式的左侧
  • \> 或\b 词尾锚定,用于单词模式的右侧
  • \bPATTERN\b 或<PATTERN> 匹配整个单词
    注意:非特殊字符组成的连续字符(字符串)都称为单词;

1.4 分组及引用:\(\) 将一个或多个字符捆绑在一起,当做一个整体进行处理;如\(root\)\+,表示将root分为一组,且匹配至少1次

后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

注:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3

\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\3:

示例:\(string1\+\(string2\)\)
\1:(string1+(string2)
)
\2:(string2)

\(ab\+\(xy\)*\)

\1:ab\+\(xy\)*

\2:xy

二、grep、egrep、fgrep(不支持正则表达式)

grep:Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
# option:
--color=auto:对匹配到的文本着色后高亮显示;
-i:ignorecase,忽略字符的大小写;
-o:仅显示匹配到的字符串本身;
-w:显示匹配到的整个单词
-v, --invert-match:反向选择(显示不能被模式匹配到的行);
-e:实现多个选项间的逻辑or关系
-n:显示匹配的行号
-c: 统计匹配的行数
-E:支持使用扩展的正则表达式元字符;
-q, --quiet, --silent:静默模式,即不输出任何信息;
-A :after, 后5行
-B :before,前5行
-C :context,前后各5行

扩展匹配:egrep=grep -E

字符匹配
  .
  []
  [^] 次数匹配

*:匹配前面的字符任意次,包括0次;默认工作在贪婪模式(尽可能长的匹配) .:任意单个字符 .*:任意长度的任意字符 ?:匹配前面的字符0次或1次 +:匹配前面的字符至少1次 {n}:匹配前面的字符n次 {n,m}:匹配前面的字符n至m次

锚定:
  ^
  $
  \>,\b
  \<,\b
分组:
  () 注不需要转义
  后向引用:\1,\2,... 或者:|   示例:
  a|b :a或b
  C | cat:C或cat
  (C|c)at:Cat或cat

1、显示/etc/passwd文件中不以/bin/bash结尾的行;
  grep -v "/bin/bash$" /etc/passwd

2、找出/etc/passwd文件中的两位数或三位数;
  grep "\<[0-9]\{2,3\}\>" /etc/passwd

  grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd

3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行;
  grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg

4、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行;
   netstat -tan | grep "LISTEN[[:space:]]*$"



1、找出/proc/meminfo文件中,所有以大写或小写S开头的行;至少有三种实现方式;

  • grep -i "^s" /proc/meminfo
  • grep "^[sS]" /proc/meminfo
  • grep -E "^(s|S)" /proc/meminfo

2、显示当前系统上root、centos或user1用户的相关信息;
  grep -E "^(root|centos|user1)\>" /etc/passwd | cut -d: -f1,3,7

显示/etc/passwd文件中ID号最大的用户的用户名

  sort -t: -k3 -n /etc/passwd | tail -1 |cut -d: -f1

如果用户root存在,显示其默认的shell程序

  id root &> /dev/null && grep "^root\>" /etc/passwd |cut -d: -f7

3、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;
  grep -E -o "[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions

4、使用echo命令输出一绝对路径,使用egrep取出基名;
  echo /etc/sysconfig/ | grep -E -o "[^/]+/?$" | cut -d "/" -f1

  进一步:取出其路径名;类似于对其执行dirname命令的结果;

  echo /etc/sysconfig/ | grep -E -o "^[/]+[[:alpha:]]*"

5、找出ifconfig命令结果中的1-255之间的数值;
   ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

6、课外作业:找出ifconfig命令结果中的IP地址;
  ifconfig | egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" --color=auto

7、添加用户bash, testbash, basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;
  grep -E "^\([[:alnum:]]+\>\).*\1$" /etc/passwd

  grep -E "^\([^:]+\>\).*\1$" /etc/passwd

六、grep与正则表达式 (文本过滤)的更多相关文章

  1. Linux文本处理三剑客之grep及正则表达式详解

    Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...

  2. 第5天(半天)【shell编程初步、grep及正则表达式】

    第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...

  3. Linux grep与正则表达式

    grep命令         格式:grep [-acinv] [--color=auto] '查找字符串' filename -a 将binary文件以text文件的 -c 计算找到 ‘查找字符串’ ...

  4. grep和正则表达式

    正则表达式示例表字 符 意 义 示 例* 任意长度的字符串. a* 表示: 空字符串.aaaa.a…? 长度为0或者1的字符串. a? 表示: 空字符串和a.+ 长度为一个或者多个的字符串. a+表示 ...

  5. grep与正则表达式,grep、egrep和fgrep

    grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串. ...

  6. [Linux 006]——grep和正则表达式

    在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配, ...

  7. grep与正则表达式使用

    grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.通常grep有三种版本grep.egrep(等同于grep -E)和fgrep.egrep为扩展的g ...

  8. grep用法详解:grep与正则表达式【转】

    转自:http://blog.csdn.net/hellochenlian/article/details/34088179 grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配 ...

  9. linux初级学习笔记十:linux grep及正则表达式!(视频序号:04_4)

    本节学习的命令:grep 本节学习的技能: grep对文本的匹配 正则表达式的使用 知识点十:grep及正则表达式(4_4) grep,egrep,fgrep: grep: 根据模式搜索文本,并将符合 ...

  10. grep使用正则表达式搜索IP地址

    递归搜索当前目录及其子目录.子目录的子目录……所包含文件是否包含IP地址 grep -r "[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit: ...

随机推荐

  1. NavigatorOnLine.onLine——判断设备是否可以上网

    概述:返回浏览器的联网状态.正常联网(在线)返回true,不正常联网(离线)返回false.一旦浏览器的联网状态发生改变,该属性值也会随之变化. 1.语法 let online = window.na ...

  2. jvm垃圾回收器介绍

    上篇文章中我们讨论了jvm的内存区域,这篇文章我们来讨论针对的内存区域的垃圾回收机制. 其实针对垃圾回收我们通常考虑三个问题:1.哪些内存需要回收?2.什么时候回收?3.如何回收?下面我们针对这三个问 ...

  3. .NET Core 发布部署问题

    运行环境      操作系统                  开发工具      frameworks     .Net Core SDK 版本             托管运行 本地        ...

  4. 媲美pandas的数据分析工具包Datatable

    1 前言 data.table 是 R 中一个非常通用和高性能的包,使用简单.方便而且速度快,在 R 语言社区非常受欢迎,每个月的下载量超过 40 万,有近 650 个 CRAN 和 Biocondu ...

  5. 关于MQ的几件小事(四)如何保证消息不丢失

    1.mq原则 数据不能多,也不能少,不能多是说消息不能重复消费,这个我们上一节已解决:不能少,就是说不能丢失数据.如果mq传递的是非常核心的消息,支撑核心的业务,那么这种场景是一定不能丢失数据的. 2 ...

  6. 关于js异步的一些知识点

    1,什么是单线程,和异步有什么关系 单线程-只有一个线程,只能做一件事 单线程的原因:避免DOM 渲染的冲突 浏览器需要渲染DOM JS 可以修改DOM 结构 JS 执行的时候,浏览器DOM 渲染会暂 ...

  7. vue去哪儿网项目环境配置

     一.首先安装node.js 根据自己的(windows或mac)系统进行安装node,在开发环境中一般安装LTS版本.安装成功后,在终端输入"node -v"和"npm ...

  8. Java 之 IDEA 的 Debug 追踪

    使用 IDEA 的断点调试功能,查看程序的运行过程. 1.在有效代码行,点击行号右边的空白区域,设置断点,程序执行到断点将停止,我们可以手动来运行程序 2.点击 Debug 运行模式 3.程序停止在断 ...

  9. Input system (输入子系统)

    Input system (输入子系统) 以前写一些输入设备(键盘,鼠标等)的驱动都是字符设备,混杂设备处理的,linux开源社区的大神门看到了这大量的输入设备如此分散不堪,就想有木有一种机制,可以对 ...

  10. python采集websocket实时数据

    之前大部分的数据采集基本都是http的,也一直对如何采集websocket的实时数据有疑问,不知道入从哪里入手,一筹莫展,今天在知乎上看到了一篇采集websocket的文章,讲的很透彻 终于把这个疑问 ...