Linux文本三剑客之grep族以及相应的正则表达式

Grep族是什么?

Grep族是linux学习中搜索文本的重要工具,它基于使用正则表达式来快速简洁的搜索你想要查看的文本。是搜索文本的不二之选

什么时候及在哪里使用grep呢?

上面咱们说到了,grep是文本搜索工具,所以当我们要搜索文本,有搜索文本的需要时我们就可以是使用grep工具。

下面我们来谈谈如何使用grep族命令以及涉及到的正则表达式的内容

文本搜索工具:grep族:grep, egrep, fgrep

Linux上文本处理三剑客

grep, egrep, fgrep:文本搜索工具;基于”pattern“对给定文本进行搜索操作;

sed:Stream EDitor,流编辑器,行编辑工具;文本编辑工具;

awk:GNU awk,文本格式化工具;文本报告生成器;

egrep和fgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

正则表达式:Regular Expression, REGEX

由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能;

分两类:

基本正则表达式:BRE

扩展正则表达式:ERE

正则表达式引擎:利用正则表达式模式分析给定文本的程序;

grep家族:

grep: Global search REgular expression and Print out the line. 支持使用基本正则表达式;

egrep:支持使用扩展正则表达式;

fgrep:不支持使用正则表达式;

grep命令:

作用:文本搜索工具,根据用户指定的”pattern(过滤条件)“对目标文本逐行进行匹配检查;打印出符合条件的行;

模式:由文本字符及正则表达式元字符所编写的过滤条件;

Grep命令的使用:

grep  [OPTIONS]  PATTERN  [FILE...]

常用选项:

--color=auto:对匹配到的文本着色后高亮显示;

-i:忽略字符大小写;

-o:仅显示匹配 到的文本自身;

-v, --invert-match:反向匹配;

-E:支持扩展的正则表达式;

-q, --quiet, --silient:静默模式,不输出任何信息;

在grep命令中正则表达式元字符代表大含义:

基本正则表达式元字符:

字符匹配:

.:匹配任意单个字符;

 任意匹配

[ ]:匹配范围内的任意单个字符;

匹配范围内的单个字符,只要包含即可,如红色字体

[^ ]:匹配范围外的任意单个字符;

不包括abc都属于范围之内,如红色字体

例如:[:digit:]数字,[:lower:]所有小写字母, [:upper:]所有大写字母, [:alpha:]所有的字母包括大小写, [:alnum:]字母和数字, [:space:]空白字符, [:blank:]空白字符, [:punct:]符号字符等,这里我就不一一说明了

注:可通过使用命令 ~]#man 7 glob 命令来查看更多的字符的含义

匹配次数:

使用方式:

用在要指定其出现的次数的字符后面,用限制其前面的字符要出现的  次数;默认工作于贪婪模式;

*:匹配前面的字符任意次(0,1或多次);

grep "x*y":

Xxxyabc    ,yabc    ,abcxy   ,abcy这些结果都符合

Eg:[root@buck ~]# grep "a*p" /etc/passwd

结果如下:红色字体展现

.*:任意长度的任意字符;例子如上面“.”的例子

\+:匹配前面的字符至少1次;

grep "x\+y":

Xxxyabc  yabc(不符合)   abcxy    abcy(不符合)

Eg:

\?:匹配前面的0次或1次,即前面的字符可有可无;

grep "x\?y":

xxxyabc, yabc  ,abcxy  ,abcy都符合

eg:       注:此图只是未截出含有ap的行

\{m\}:其前面的字符出现m次,m为非负整数;

grep "x\{2\}y":

xxxyabc(符合) ,Yabc(不符合),  abcxy(不符合),  abcy(不符合)

Eg:如下红色字体

\{m,n\}:其前面的字符出现m次,m为非负整数;[m,n]

grep “x\{2,3\}y”

Eg:如下红色字体

\{0,n\}:至多n次;

\{m,\}:至少m次;

例子与上面的类同

   位置锚定

限制使用模式搜索文本,限制模式所匹配到的文本只能出现于目标文本的哪个位置;

^:行首锚定;用于模式的最左侧,^PATTERN

Eg:以apple开头的行被检测出来显示

$:行尾锚定;用于模式的最右侧,PATTERN$

Eg: 以bash结尾的行显示出来

^PATTERN$:要让PATTERN完全匹配一整行;

^$:空行;

^[[:space:]]*$:

例子与上面雷同

单词:由非特殊字符组成的连续字符(字符串)都称为单词;

\<或\b:词首锚定,用于单词模式的左侧,格式为\<PATTERN, \bPATTERN

eg:如下红色字体

\>或\b:词尾锚定,用于单词模式的右侧,格式为PATTERN\>, PATTERN\b

\<PATTERN\>:单词锚定;

eg:

练习:

1、显示/etc/passwd文件中不以apple开头但不以bash结尾的行;

2、找出/etc/passwd文件中的三位或四位数;

~]# grep "\<[0-9]\{3,4\}\>" /etc/passwd

3、找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行;

~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg

4、找出"netstat  -tan”命令的结果中,以‘LISTEN’后跟0或多个空白字符结尾的行;

~]# netstat -tan | grep "LISTEN[[:space:]]*$"

5、找出"fdisk  -l“命令的结果中,包含以/dev/后跟sd或hd及一个小字母的行;

~]# fdisk -l | grep "/dev/[sh]d[a-z]\>"

6、找出”ldd  /usr/bin/cat“命令的结果中文件路径;

~]# ldd /usr/bin/cat | grep -o "/[^[:space:]]\+"

  分组与引用:

\(PATTERN\):将此PATTERN匹配到的字符当作一个不可侵害整体进行处理;

Note:分组括号中的模式匹配到的字符会被正则表达式引擎自动记录于内部的变量中,这些变量是\1, \2, \3, ...

eg:

pat1\(pat2\)pat3\(pat4\(pat5\)pat6\)

说明:

\n:模式中第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符串;(不是模式,而是模式匹配的结果)

\1:第一组括号中的pattern匹配到的字符串;

\2:第二组括号中的pattern匹配到的字符串;

……

eg:

He love his lover

He like his lover

He love his liker

He like his liker

l..e.*l..er

其结果为:He love his lover

He like his lover

He love his liker

He like his liker

\(l..e\).*\1r

其结果为:He love his lover

He like his liker

后向引用:引用前面的括号中的模式所匹配到的字符串;

常用选项之二:

-E, --extended-regexp:支持使用扩展正则表达式

-F, --fixed-strings:支持使用固定字符串,不支持正则表达式,相当于fgrep;

-G, --basic-regexp:支持使用基本正则表达式;

-P, --perl-regexp:支持使用pcre正则表达式;

-e PATTERN, --regexp=PATTERN:多模式机制;

-f FILE, --file=FILE:FILE为每行包含了一个pattern的文本文件,即grep script;

-A NUM, --after-context=NUM

-B NUM, --before-context=NUM

-C NUM, -NUM, --context=NUM

egrep:  支持使用扩展正则表达式的grep命令,相当于grep -E;

语法:

egrep [OPTIONS] PATTERN [FILE...]

扩展正则表达式的元字符:

字符匹配:

.:任意单个字符

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

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

例子与上面介绍grep的例子雷同,这里就不一一列出

匹配次数:

*:任意次;

?:0次或1次;

+:1次或多次;

{m}:匹配m次;

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

{0,n}

{m,}

位置锚定:

^:行首

$:行尾

\<, \b:词首

\>, \b:词尾

分组及引用:

(pattern):分组,括号中的模式匹配到的字符会被记录于正则表达式引擎内部的变量中;

后向引用:\1, \2, ...

或者:

a|b:a或者b

C|cat:表示C或cat

(C|c)at:表示Cat或cat

说明:egrep的正则表达式中的例子与grep中的基本相同,这里就不一一列出

练习:

1、显示/etc/passwd文件中不以bash结尾的行;

~]# egrep -v "bash$" /etc/passwd

2、找出/etc/passwd文件中的三位或四位数;

~]# egrep "\<[0-9]{3,4}\>" /etc/passwd

3、找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行;

eg:egrep “^[[:space:]][a-z]+” /etc/grub2.cfg

4、找出"netstat  -tan”命令的结果中,以‘LISTEN’后跟0或多个空白字符结尾的行;

5、找出"fdisk  -l“命令的结果中,包含以/dev/后跟sd或hd及一个小字母的行;

6、找出”ldd  /usr/bin/cat“命令的结果中文件路径;

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

~]# egrep "^(s|S)" /tmp/meminfo

~]# grep "^[sS]" /tmp/meminfo

~]# grep -i "^s" /tmp/meminfo

8、显示当前系统上root、centos或slackware用户的相关信息;

~]# egrep "^(root|centos|slackware)\>" /etc/passwd

9、echo输出一个绝对路径,使用egrep取出其基名;

~]# echo /etc/passwd/ | egrep -o "[^/]+/?$"

10、找出ifconfig命令结果中的1-255之间的整数;

~]# ifconfig | egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

11、添加用户bash、testbash、basher及nologin,要求前三个用户的默认shell为/bin/bash,nologin的默认shell为/sbin/nologin,而后找出其用户名与shell名相同的用户;

~]# egrep "^([[a-z0-9]+)\>.*\1$" /etc/passwd

llinux文本三剑客之grep、egrep及相应的正则表达式和用法相关推荐

  1. Linux系统文本三剑客之grep使用方法

    Linux系统文本三剑客之grep使用方法 一.grep介绍 二.grep的常用选项 三.grep的日常用法 1.过滤目录下以.conf结尾的文件中含root的文件 2.查找目录下所有文件包含koel ...

  2. linux文本三剑客演讲稿,linux文本三剑客之grep

    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...

  3. 文本三剑客之grep、sed、awk

    回顾计划任务内容 小tips:当执行 cd /tmp || mkdir test1时,只有当前面执行cd/tmp执行失败后,后面执行的mkdir test1才会执行. 一次调度执行at 语法格式 at ...

  4. Linux中的grep、egrep及相应的正则表达式和用法

    在Linux系统当中,处理文本有三个常用的工具,俗称文本处理三剑客,grep就是其中之一. grep是一种强大的文本搜索工具,它的全称是:Globally search a Regular Expre ...

  5. grep egrep命令中-w选项的用法

    20171015老男孩第41期第6周课程中讲到了grep/egrep命令的四个选项: 1. -i 不区分大小写,即不区分:aA 2. -w 按照单词 进行匹配(括号外的意思是老师讲的,但我总感觉这样理 ...

  6. linux中egrep的用法,liunx中grep,egrep及相应的正则表达式和用法

    正则表达式是linux中重要的一部分,学习正则表达式先要学好grep和egrep的命令使用. 1. grep: grep命令的基本语法格式 grep [OPTION]... 'PATTERN' FIL ...

  7. 文本三剑客之grep

    接受正则表达式,按行匹配,将会过滤出匹配的所有行 格式: grep   [OPTION]...     PATTERN    [FILE]... 可以看出,grep后可以同时接多个文件 选项OPTIO ...

  8. linux 文本搜索命令 grep egrep fgrep 区别

    grep 传统的 grep 程序, 在没有参数的情况下, 只输出符合 RE 字符串之句子. 常见参数如下: -v: 逆反模示, 只输出"不含" RE 字符串之句子. -r: 递归模 ...

  9. Linux grep,egrep及相应的正则表达式用法详解

    linux在进行文本处理过程中的文本搜索工具称为正则表达式.文本搜索工具有grep.egrep.fgrep,egrep为正则表达式的扩展正则表达式,fgrep用于搜索文本字符串,与 grep 和 eg ...

最新文章

  1. 与其撩妹尬舞,倒不如跟AI学跳舞
  2. 世界AI大会三马纵论:马云乐观、马斯克悲观,马化腾认为技术孤立主义有大危害...
  3. C++11 智能指针unique_ptr使用 -- 以排序二叉树为例
  4. ACM_变形课(并查集)
  5. python matplotlib plt 画图 将刻度 替换为文字/字符以及画断断续续的分段函数
  6. HDU-1874 畅通工程续 (最短路径启蒙题)
  7. php仿伊人集源码,仿伊人集wecenter()包含所有功能及官方付费插件,整站带数据...
  8. 用android做用户管理中心,Android 如何设计用户Session管理?
  9. oracle启动bat命令,ORACLE 启动 bat 脚本
  10. HDU3544 不平等博弈
  11. 微信小程序开发之动图小游戏是实现(代码篇)
  12. Python实战:利用正则表达式(requests模块)获取电影排行榜
  13. C语言交换a,b值的几种写法
  14. win10怎么更新显卡驱动_win10更新失败无限重启怎么办
  15. 元宇宙虚拟数字人系统
  16. 异步爬虫(高效爬虫)
  17. golang日志库zerolog使用记录
  18. [Ubuntu]从开始到编程
  19. 科技论文摘要写作技巧
  20. Java三齐王乱点兵算法,【ACM】韩信点兵算法

热门文章

  1. 研究生必备自学课程!打好科研的数学基础与机器学习基础!
  2. centec交换机配置_盛科(Centec)交换机 SmartConfig 特性
  3. 你的跨境电商独立站访问性能如何?
  4. 独立站适合做B端吗?外贸B2B独立站怎么做?
  5. Hexo中Next主题个性化美化的解决方案
  6. python入门——列表+元组+字典+集合
  7. Java并发(一)——线程
  8. 从零开始学产品第五篇:三个环境,开发、测试和线上
  9. 华为-RH5885 V3 远程KVM
  10. springcloud21---Config-bus实现配置自动刷新