码迷,mamicode.com
首页 > 其他好文 > 详细

我的学习记录--grep , egrep

时间:2015-04-02 06:52:24      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:grep egrep 正则表达式 扩展正则表达式

概念:

grep (Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep:传统的grep程序,支持基本正则表达式

egrep:扩展的grep程序,支持扩展正则表达式

正则表达式:简单来说就是,用一串自己定义的条件字符串,去匹配检索文档中符合条件的字符。


grep基本格式:

    grep [OPTIONS] PATTERN [FILE...]

常用选项:      

 -o:只显示被模式匹配到的内容

 -i:(ignore case) 搜索时不区分字符大小写

 -v:显示不能够被模式匹配到的行

 -E:使用扩展正则表达式

 -A #:显示被模式匹配到的行以及下#行

 -B #:显示被模式匹配到的行以及上#行

 -C #:显示被模式匹配到的上下#行

         --color[=WHEN], --colour[=WHEN] :

               用于设置匹配到的字符,显示高亮颜色否,有三个选项 auto ,always ,never

         例如:

           技术分享  

基本正则表达式元字符:


    字符匹配:

. :匹配任意单个字符

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

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


    次数匹配:在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数

* :任意长度,表示0次,1次或多次;

        .*:任意长度的任意字符(工作于贪婪模式,尽可能长的进行匹配)

\?:匹配其前的字符0次或1次,表示其左侧字符可有可无

\+:匹配其前面的字符1次或多次,表示其左侧字符至少出现一次

\{m\}:精确匹配其左侧字符出现m次

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

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

\{m,\}:至少m次


    位置锚定:

^:锚定行首,形如:^PATTERN    

$:锚定行尾,形如:PATTERN$

^PATTERN$:用模式来匹配整行

         例如:

            grep "^$"  匹配空白字符的行(有空格的行不能匹配)

            grep "^[[:space:]]*$"  匹配所有空行(可以有空格)

    grep "^sh.*sh$" /etc/passwd  匹配/etc/passwd文件中以sh开始,sh结尾的整行

    单词锚定:由非特殊字符组成的连续的字符串

\<:锚定词首 也可用\b,形如:\<PATTERN  \bPATTERN

例如:grep "\<sh" /etc/passwd  匹配/etc/passwd文件中以“sh”开头的单词

        \>:锚定词尾,也可以用\b,形如:PATTERN\>  PATTERN\b

\<PATTERN\>:匹配PATTERN能匹配的整个单词


    分组匹配:

\(PATTERN\)

注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆(保存于内置    的变量中,这些变量时\1,\2,...),因此,还可以被引用

\1:引用,模式中左到右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容

\2:引用,模式自左而右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容

    例如:

grep "\(a.b\).*\1" FILE.. 用于匹配文件行中出现了"a.b",且后面再次出现了前方“a.b”匹配到的相同字符串   

        如图:

技术分享 

        amb hello amb 匹配

amb hello anb 不匹配 \1匹配的是前面匹配到的内容amb,而非\(a.b\)模式



扩展的正则表达式元字符:(无特殊说明则用法和基本正则表达式相同)

    字符匹配:

        . :匹配任意单个字符

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

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

    次数匹配:

*:任意次

?:0或1次

+:至少1次

{m}:精确匹配m次

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

{m,}:至少m次

{0,n}:至多n次

    位置锚定:

^:行首

$:行尾

\<,\b:词首

\>,\b:词尾

^$:空白行

    分组:

(PATTERN):引用\1,\2,...


    或者:(两侧的所有内容)

a|b :a或者b  

abc|CBA: abc或者CBA


    egrep(grep -E)命令:(基本和grep一样)

grep -E PATTERN FILE...

egrep PATTERN FILE...

        

练习:

    1.显示/proc/meminfo文件中以大写或小写S开头的行;

        # grep -i "^s" /proc/meminfo --color=auto 或;

        # grep "^[sS]" /proc/meminfo --color=auto

        技术分享

        用扩展正则表达式书写:

        # egrep -i "^s" /proc/meminfo --color=auto

        技术分享

        

    2.显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户

        # grep -v "nologin$" /etc/passwd    ;-v 显示不被匹配到的行

        技术分享

        用扩展正则表达式书写:

        # grep -E -v "nologin$" /etc/passwd  ;-E 表示使用扩展正则表达式

        技术分享


    3.找出当前系统上其用户名和默认shell相同的用户的信息

grep "^\(.*\)\>.*\1$"  --color=auto /etc/passwd

        技术分享

        用扩展正则表达式书写:

        # grep "^(.*)\>.*\1$"  --color=auto /etc/passwd 

        技术分享




本文出自 “Linux” 博客,请务必保留此出处http://laoliao.blog.51cto.com/10027070/1627435

我的学习记录--grep , egrep

标签:grep egrep 正则表达式 扩展正则表达式

原文地址:http://laoliao.blog.51cto.com/10027070/1627435

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!