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

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

  1.grep 初体验

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

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

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

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

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

  2.grep 和正则表达式

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

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

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

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

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

  

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

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

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

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

  

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

  

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

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

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

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

  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 下的三个文本处理杀器,等学到相应的章节再继续介绍 :)



作者:Charleylla  转载请注明出处:http://www.cnblogs.com/charleylla/p/5988885.html



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

时间: 2024-10-26 08:12:55

[Linux 006]——grep和正则表达式的相关文章

linux学习-grep使用正则表达式示例

在linux上使用grep配合正则表达式可以产生强大的搜索的效果,由于正则表达式中含有较多的特殊字符,所以结合grep时,最好使用单引号将表达式括起来,以免造成错误.首先创建一个文件RegExp.txt,文本内容如下所示: --------TEXT BEGIN------------- good morining teacher hellp world is as script gold sunshine looks beautiful golden time files god belss m

Linux基础--grep与正则表达式

grep的基本用法可以参照此[链接]中的文档,写的很详细了,这里主要说明正则表达式的用法. grep默认支持基本正则表达式(BRE)和扩展的正则表达式(ERE). fgrep不支持正则表达式,不需要加载正则表达式引擎,因此速度较快. egrep只支持扩展的正则表达式(ERE). 'egrep' means 'grep -E'.  'fgrep' means 'grep -F'. 扩展的正则表达式(ERE)与基本正则表达式(BRE)的区别并不大,BRE中的匹配规则在ERE中同样适用,只是ERE在使

Linux系统grep及正则表达式详解

1.grep:根据模式搜索文本 并将符合模式的文本行显示出来 文本字符和正则表达式的元字符组合而成匹配条件 grep'root' /etc/passwd搜索/etc/passwd文件中包含有root字符的行显示出来 -i:只显示被模式匹配的行 --color:被模式匹配的行用颜色显示出来 -v:只显示没有被模式匹配的行 -o:只显示被模式匹配到的字符串 2.正则表达式: 元字符: .:表示匹配任意单个字符 grep'r..t' /etc/passwd []:表示匹配指定范围内的任意单个字符 [^

linux命令grep及正则表达式

linux下grep、egrep及相应的正则表达式和用法

     linux下grep.egrep及相应的正则表达式和用法                       一.简介      Linux上文本处理三剑客(引用自马哥教育 ):  grep, egrep, fgrep:文本搜索工具:基于"pattern"对给定文本进行搜索操作:     sed:Stream EDitor,流编辑器,行编辑工具:文本编辑工具:     awk:GNU awk,文本格式化工具:文本报告生成器:         grep (缩写来自Globally se

Linux基础之文本处理工具grep及正则表达式(附带egrep与grep的不同)

文本处理工具grep,正则表达式在Linux学习过程中很容易出现困惑与障碍的地方,这里分享下学习这方面内容的一些感受. grep Global search REgular expression and Print out the line 作用:文本搜索工具,根据用户指定的'模式(过滤条件)'对目标文本逐行进行匹配检查:打印匹配到的行: '模式':由正则表达式的元字符及文本字符所编写出的过滤条件. grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS]

Linux中grep、egrep正则表达式的使用

正则表达式的由来 正则表达式,英文写法Regular Expression,在编程语言中常被简写为regex.regexp等.它是用来描述.匹配一系列符合某个句法规则字符串的单个字符串. 正则表达式通常被用来检索.替换那些符合某个模式(Pattern)的文本. 1950年代,UNIX之父Ken Thompson将正则表达式引入编辑器QED,然后是编辑器ed,最终引入到grep中.从此,正则表达式被广泛地应用到了各种UNIX或类UNIX系统的工具之中,例如perl. 近些年来,主流操作系统.主流开

Linux系统的grep以及正则表达式浅析!

grep命令可以从文本中或者通过管道送过来的字符流中或一个"-"符号代替文件名来搜索精确或者模糊的匹配信息,grep家族有三个命令:grep,egrep,fgrep. grep支持正则表达式匹配查找 egrep支持扩展正则表达式匹配查找 fgrep不支持正则表达式匹配查找 grep命令的格式: grep [OPT] 'PATTERN' FILE PATTERN是所需要匹配的内容 精确匹配中单双引号的含义相同 如果PATTERN是精确匹配(即只有普通字符不包含元字符)且字符串中间不包含空

Linux学习之grep及正则表达式

1.grep:根据模式搜索文本,并将符合模式的文本行打印出来 使用基本正则表达式定义的模式来过滤文本的命令 grep 选项 模式(正则表达式) 参数 模式:由文本字符和正则表达式的元字符组合而成的匹配条件 -E:扩展正则表达式 -i:不区分大小写 -w:匹配整个单词 -x:匹配整行 -v:显示不匹配的行 --colour/--color:高亮显示匹配字符串 -A:打印匹配本身以及后面的几行 -B:打印匹配本身以及前面的几行 -C:打印匹配本机以后前后的几行 -o:只显示匹配到的字符串 -c:显示