Linux 命令grep, egrep,正则表达式大全

 Linux系统中grep,egrep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

 

1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。

2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。

3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。



grep语法格式:


             grep [option]... ‘PATTERN‘ FILE...




options:

-E : 使用扩展正则表达式进行匹配, grep -E 或取代 egrep 命令。

-F : 使用固定字符串进行匹配, grep -F 或取代传统的fgrep命令。


-A #:显示匹配字符串的后面所有行。

-B #:显示匹配字符串的前面所有行。

-C #:显示匹配字符串的前面后面的行。

-e : 通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。

  模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。

-f : 从pat-file文件读取模式作为匹配。

-i : 模式匹配时忽略大小写差异。

-l : 列出匹配模式的文件名称,而不是打印匹配的行。

-q : 静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。

-s : 不显示错误信息,通常与-q并用。

-v : 取反。

-o: 仅显示匹配的字串,而非字串所在的行。

--color=auto: 匹配的字符出现颜色。

-n:显示匹配行及行号。

-c 只输出匹配行的计数。

说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。

可以使用多个-e 或 -f 选项,建立要查找的模式列表。



正则表达式:

相关资料:http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能;



元字符:

         不表示其字面意义,而用于额外功能性描述



正则表达式: 

        正则表达式引擎



基本正则表达式:没有特殊意义的字符     grep

扩展正则表达式: 元字符,有在正则表达式中有特殊意义   egrep,grep -E

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




字符匹配:

    .: 匹配任意单个字符

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

    [0-9], [[:digit:]]    : 数字字符

    [a-z], [[:lower:]]    :小写字母字符

    [A-Z], [[:upper:]]    :大写字母字符

    [[:space:]]    :空格字符

    [[:punct:]]    :标点符号字符

    [[:alpha:]]    :字母字符

    [[:alnum:]]    :数字字符




次数匹配元字符:用于实现指定其前面的字符所能够出现的次数

    *: 任意长度,它前面的字符可以出现任意次

        例如:a*b

            aab, abb, b, 

    \?: 0次或1次,它前面的字符是可有可无的

例如:a\?b

ab, b, cb

    \{m\}: m次,它前的字符要出现m次

        例如:a\{2\}b

        ab, aab, b, aaaab, abb

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

        例如:a\{2,5\}b

        ab, b, aab

    \{m,\}:至少m次

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


位置锚定:

    ^ : 行首锚定;匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义

        写在模式最左侧

    

    $: 行尾锚定:匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义

        写在模式最右侧

    

    ^$:  匹配空白行

    \   :  通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}

    []  : 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,


不包含特殊字符的连续字符组成的串叫单词:

  \<: 词首,出现于单词左侧,\b

     \<char

  \>: 词尾,出现于单词右侧, \b

     char\>


扩展正则表达式:

字符匹配:

.

[]

[^]

次数匹配:

*:任意次

?: 0次或1次

+: 至少1次

{m}: 精确匹配m次 

{n,m}: \{n\}指重现n次;\{n,m\}指重现n至m次

{m,}:至少m次

{0,n}:至多n次

锚定:

^    

        $

\<, \b

\>, \b

^$, ^[[:space:]]*$

分组:

()

引用:\1, \2, \3




或者:

a|b: a或者b

con(C|c)at

concat或conCat?

conC或cat



grep -E  ‘PATTERN‘ FILE...

egrep ‘PATTERN‘ FILE...



常用Linux/Unix工具中的表示法

PCRE记法

 vi/vim

 grep

 awk

 sed

 

*

 *

 *

 *

 *

 

+

 \+

 \+

 +

 \+

 

?

 \=

 \?

 ?

 \?

 

{m,n}

 \{m,n}

 \{m,n\}

 {m,n}

 \{m,n\}

 

\b *

 \< \>

 \< \>

 \< \>

 \y \< \>

 

(…|…)

 \(…\|…\)

 \(…\|…\)

 (…|…)

 (…|…)

 

(…)

 \(…\)

 \(…\)

 (…)

 (…)

 

\1 \2

 \1 \2

 \1 \2

 不支持

 \1 \2

 

注:PCRE中常用\b来表示“单词的起始或结束位置”,但Linux/Unix的工具中,通常用\<来匹配“单词的起始位置”,用\>来匹配“单词的结束位置”,sed中的\y可以同时匹配这两个位置。


实例:

   1,显示文件中以大写或小写c开头的行


   




2,显示文件中以r开头的行






3,将文件行尾为(2)结尾的显示出来


    






4,搜索文件中r与t之间有2-3个o存在的字符串





5,搜索重复一个或一个以上的字符串如



6,ifconfig命令可以显示当前主机的IP地址相关的信息等,如果使用grep等文本处理命令取出本机的各IP地址,要求不包127.0.0.1;




本文出自 “与君共享” 博客,请务必保留此出处http://kevin92.blog.51cto.com/6928681/1600656

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。