linux下的grep,egrep及正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下的grep,egrep及正则表达式相关的知识,希望对你有一定的参考价值。

一, linux上常用的文本搜索工具,grep家族和正则表达式及介绍

  linux上常用的文本搜索工具

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

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

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


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

        一般分为两类:

基本正则表达式:BRE 

扩展正则表达式:ERE

   grep家族

           grep:支持使用基本正则表达式;

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

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

   grep命令和基本正则表达式

      grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配到的行打印出来。grep全称是Globally search for a Regular Expression and  print  out the line,表示全局搜索正则表达式并打印匹配结果的意思。

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

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

      格式:grep  [OPTIONS]  PATTERN  [FILE...]

  常用选项:

-i:忽略字符大小写

技术分享

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

技术分享

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

技术分享

-v:显示除匹配结果以外的所有内容

技术分享

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

技术分享

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

技术分享

-A n : n为数字,表示显示匹配到内容及其后面的n行

技术分享

-B n : n为数字,表示显示匹配到内容及其前面的n行

技术分享

-C n : n为数字,表示显示匹配到内容及其前后的n行

技术分享

-E:等同于egrep,支持扩展的正则表达式;

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

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

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

基本正则表达式元字符

位置锚定:

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

技术分享

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

技术分享

^$:空白行;

^[[:space:]]*$:空行或包含空白字符的行;

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

            \< 或 \b:词首锚定,用于单词模式的左侧;

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

            \<PATTERN\>:匹配完整单词;

技术分享

字符匹配:

.:匹配任意单个字符;

技术分享

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

技术分享

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

技术分享

 [[:digit:]]:任意数字;

 [[:lower:]]:任意小写字母;

 [[:upper:]]:任意大写字母;

 [[:alpha:]]:任意字母;

 [[:alnum:]]:任意的字母和数字;

 [[:space:]]:空白字符;

 [[:blank:]]:空格和Tab键等;

 [[:punct:]]:所有的标点符号。

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

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

技术分享

.*:任意长度的任意字符;

技术分享

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

技术分享

\?:匹配前面的0次或1次,即前面的字符可有可无;(大于等于0,小于等于1)

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

分组及引用

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

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

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

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

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

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

            ……

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

技术分享

egrep命令和扩展正则表达式:

   egrep [OPTIONS] PATTERN [FILE...]

      注:常用选项与grep一致,参考上述grep的常用选项即可。

egrep和grep的区别地方:

+ : 表示匹配前面的字符至少一次

技术分享

? : 等同于grep中的\?,在egrep中不需要转义

() : 等同于grep中的\(\),在egrep中不需要转义

{} : 等同于grep中的\{\},在egrep中不需要转义

技术分享

分组及引用:

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

| : 表示匹配符号两边的任意一边,比如a|b,表示匹配a或者b

技术分享

注意,| 左右带括号和不带括号的区别


以上就是grep和egrep及正则表达式的简单用法。

以上是关于linux下的grep,egrep及正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

grep与egrep命令及正则表达式

Linux文本过滤搜索器grep与egrep的常用正则表达式与用法

grep和egrep命令及相应的正则表达式用法总结

egrep 及扩展正则表达式

grep和egrep正则表达式

grep和egrep正则表达式