Linux基础之grep和正则表达式

   2016-10-31 0
核心提示:在使用系统时,我们或多或少的有一些搜索、查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行。grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配,这是一个强大的功能,有必要好好掌握。 1.grep 初体验

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

1.grep 初体验

grep PATTERN [OPTIONS] FILE:在文件中按照模式进行查找。FILE 是我们要查找的目标文件,如果不指定目标文件,grep 将会从标准输入中读取输入的内容,然后进行匹配。为了方便起见,本文的所有演示都在命令行中通过标准输入进行。

  • grep PATTERN:最基本的用法,根据 PATTERN 进行查找

Linux基础之grep和正则表达式

如果没有高亮显示匹配到的内容,可以手动指定:grep --color PATTER 进行匹配,更可以使用命令别名,减少我们的输入时间:alias grep="grep --color"。

  • grep PATTERN -i:忽略大小写匹配
  • grep PATTERN -v:反转输出。匹配到的内容不输出,只输出没被匹配到的内容。

Linux基础之grep和正则表达式

  • grep PATTERN -o:只显示匹配到的字串(PATTERN)。默认显示匹配到的字串所在的整行文本。

2.grep 和正则表达式

正则表达式(Regular Expression 或 REGEXP)分为基础正则表达式(Basic REGEXP)和扩展正则表达式(Extended REGEXP)。grep 默认采用基础正则表达式,如需使用扩展正则表达式需要附加选项。

由于介绍正则表达式实在太过复杂,我想了很久也无法很好的组织语言,因此这里就不再对正则中的元字符进行一一的介绍了。需要了解这方面的同学,可以去看一下三十分钟入门正则表达式系列的教程,应该很快就能学会。

  • 使用 grep 进行简单的正则匹配

"[]" 表示匹配 [] 中出现的任意一个字符,[a-zA-Z] 表示匹配所有的英文字母。

Linux基础之grep和正则表达式

"[^]" 表示匹配出去 [] 中出现的字符之外的任意字符。

Linux基础之grep和正则表达式

在正则表达式中,'*' 号不再表示任意字符,而表示其前的字符可以出现任意次。有时候我们在命令中使用 '*' 进行通配符匹配文件,要注意它在正则表达式中的不同用法。在正则表示中使用 '.' 点号来匹配任意字符。 Linux基础之grep和正则表达式

在正则中,'.' 点号表示不为空的任意字符。

Linux基础之grep和正则表达式

".*" 表示匹配出现任意次数的任意字符。正则表达式默认处于贪婪模式,因此在第一次匹配到结果后,还会进行多次匹配,知道没有匹配为止。

Linux基础之grep和正则表达式

"\?" 表示匹配前面的字符出现 0 次 或者 1 次,注意这个问号需要被转义。

Linux基础之grep和正则表达式

"\{m,n\}" 表示前面的字符出现最少 m 次,最大 n 次。"\{m,\}" 表示前面的字符至少出现 m 次,"\{,n\}" 表示前面的字符至多出现 n 次。

Linux基础之grep和正则表达式

'^' 和 '$' 是正则表达式中的两个位置锚定。'^' 表示其后的字符必须出现在行首,而 '$' 表示其前的字符必须出现在行尾,"^$" 表示匹配空白字符。

Linux基础之grep和正则表达式

"\<" 和 "\>" 用来锚定单词,二者不一定要成对出现,也可以使用 "\b" 进行锚定。"\bWORD" (或者 "\<WORD\>") 表示匹配以 WORD 开头的单词,"WORD\b" 表示匹配以 WORD 结尾的单词,"\bWORD\b" 表示完完全全匹配 WORD 单词。

Linux基础之grep和正则表达式

"\(\)" 表示对 PATTERN 进行分组,分组还支持后向引用,使用 "\1","\2" 等引用前面的分组。后向引用只匹配和前面相同的内容。

Linux基础之grep和正则表达式

'|' 表示或,匹配其前或者其后的单词,注意并不是匹配字符,如需匹配字符,需要使用分组进行限定。我这里使用的是扩展正则,如需使用基本正则,需要将 '|' 换为 "\|"。

Linux基础之grep和正则表达式

3.扩展正则表达式

grep 同时还支持扩展正则表达式,在使用扩展正则表达式是,需要使用 -E 选项。基础正则表达式和扩展正则表达式中的一些区别:

  • 基础正则中使用 \?,扩展正则中使用 ?
  • 基础正则中使用 \(\),扩展正则中使用 ()
  • 基础正则中使用 \{\},扩展正则中使用 {}

在基础正则表达式中匹配 ?,(),{} ,不需要进行转移,而在扩展正则表达式中则需要加上转义符号 \。

扩展正则表达式中的其他选项:

  • \s:匹配空白字符
  • \S:匹配非空白字符
  • \w:匹配字母,数字,相当于 [0-9a-zA-Z]
  • \W:不匹配字母和数字,相当于 [^0-9a-zA-Z]

4.grep 的其他选项

  • grep PATTERN FILE -A NUM:使用 grep 进行匹配之后,显示匹配的行,同时向后显示指定的行
  • grep PATTERN FILE -B NUM:和上面相反,向后显示指定行
  • grep PATTERN FILE -C NUM:进行匹配之后,分别向前和向后显示指定的行,相当于 -AB NUM
  • grep PATTERN FILE -c:显示被匹配到的行数
  • grep PATTERN FILE -F:相当于 fgrep
  • grep PATTERN FILE -P:使用 Perl 风格的正则表达式
    • \d:匹配任意十进制数字,相当于 [0-9]
    • \D:匹配任意非数字字符,相当于 [^0-9]

5.egrep 和 fgrep

在使用 grep 时,如果想要开启扩展正则表达式,需要指定 -E 选项,而 egrep 命令则是默认支持扩展正则表达式。因此在需要使用扩展正则表达式时推荐使用 egrep 代替 grep -E。

fgrep 表示快速匹配,不支持正则表达式,没有转义的概念,会对 PATTERN 中的所有字符进行匹配。

6.总结

本篇我们介绍了 grep 命令和正则表达式的基本使用,grep 是 Linux 下的一个文本处理命令,配合正则表达式使用,其功能非常强大。grep 主要用来查找操作,如果想使用替换等更加强大的功能,就需要使用 sed 或者 awk 命令。grep,sed,awk 被称为 Linux 下的三个文本处理杀器,等学到相应的章节再继续介绍 :)

grep使用简明及正则表达式 http://www.linuxidc.com/Linux/2013-08/88534.htm

正则表达式的用法 http://www.linuxidc.com/Linux/2013-03/81897.htm

正则表达式之零宽断言 http://www.linuxidc.com/Linux/2013-03/81897.htm

Linux命令-文件文本操作grep http://www.linuxidc.com/Linux/2015-12/126259.htm

grep正则表达式 http://www.linuxidc.com/Linux/2015-09/123035.htm

Linux中正则表达式与文件格式化处理命令(awk/grep/sed) http://www.linuxidc.com/Linux/2013-03/81018.htm

本文永久更新链接地址 http://www.linuxidc.com/Linux/2016-10/136250.htm

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • linux sed命令中的正则表达式问号、加号、圆括
    linux sed命令内的正则表达式语法分两种,一种叫Basic (BRE) Syntax,另一种叫Extended (ERE) Syntax。默认使用的是BRE。这个BRE就是一个简化版,语法稍微有点不一样,问号、加号、圆括号、花括号和竖线没有特殊含义,就代表字符本身,如果要原本定义的实现特
    02-09
  • grep正则表达式及sort、diff等相关命令
    Linux文本处理三剑客:grep:文本过滤工具(模式:patter)sed:stream editor 流编辑器,文本编辑工具awk:linux上的实现gawk,文本报告生成器(格式化文本)* 正则表达式:Regular Expression,REGEXP,由一类特殊字符及文本字符所编写的模式,其中有些字符
  • GNU Sed 4.3发布,正则表达式提速10倍
    昨天GNU Sed发布了最新版4.3,号称正则表达式提速10倍,并优化了非阻塞IO性能。具体更新内容请看http://lists.gnu.org/archive/html/info-gnu/2017-01/msg00000.html下载请前往软件主页https://www.gnu.org/software/sed/流编辑器 是用来从文件读取文本或者从
  • 正则表达式和文本处理工具grep,egrep
    正则表达式(Regular Expression)是通过一些特殊字符的排列,来表示控制或者通配的功能,用于查找,替换,删除一行或者多行文字字符串,是用在字符处理上的一项表达式,有时候我们可通过表达式来筛选出我们所需要的信息。正则表达式分为两类:基本正则表达式
  • 第七章 Shell正则表达式
    正则表达式在每种语言中都会有,目的就是匹配符合你预期要求的字符串。7.1 Shell正则表达式基础正则表达式:BRE(basic regular express)扩展正则表达式:ERE(extend regular express),扩展的表达式有+、?、|和()符号描述示例.匹配除换行符(\n)之外的任意
  • 文本处理工具及正则表达式
    一、*各种文本处理工具1.1抽取文本的工具1.1.1cat、less查看文本内容more、less和cat【选项】【文件】cat–n,-d列行,-A:显示所有看不见的符号(控制符),-E:显示结尾$;-s:压缩连续空行为一行more –d:显示翻页及退出提示less:一页一页查看文件或标准
  • week4:grep命令正则表达式的应用
    1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限;~]# cp -r /etc/skel/ /home/tuser1 |chmod -R g-rwx,o-rwx /home/tuser12.编辑/etc/group文件,添加组hadoop;~]# echo hadoop:x:2016: /etc/group3.手
  • grep命令与正则表达式的应用示例、find命令应用示例
    grep命令与正则表达式的应用示例、find命令应用
    grep命令与正则表达式的应用示例、find命令应用示例显示当前系统上root、fedora或user1用户的默认shell。 使用扩展正则表达式,它支持使用A|B表示或者之意。查看用户的默认shell,cat /etc/passwd文件,根据用户名所处位置进行锚定,其最后一个字段即表示该用
  • Linux Shell编程-正则表达式
    Linux Shell编程-正则表达式
    一 正则表达式与通配符 1 正则表达式是用在文件中匹配符合条件的字符串,正则是包含匹配,grep,awk,sed等命令可以支持正则表达式 2 通配符是用来匹配符合条件的文件名,通配符是完全匹配,ls,find,cp这些命令不支持正则表达式,所以只能用Shell自己的通配
  • cp、chmod、chown、grep及正则表达式练习
    cp、chmod、chown、grep及正则表达式练习
    复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。编辑/etc/group文件,添加组hadoop。 使用vim指令编辑/etc/group文件,进入末行模式(输入冒号),然后输入$回车,将光标跳至末行,然后按下o(小写)在最
点击排行