-1 使用场景:搜索定位内容并输出(所在行)

-2 三者区别:

     --1 grep  默认支持普通正则

     --2 egrep 默认支持扩展正则 等同于 grep -E

     --3 fgrep 速度最快,不支持正则表达式        

-3 使用格式:grep 参数 匹配式 文件

-4 参数:可合并

-5 匹配式:-1 需用引号 -2 支持正则表达式

-6 具体使用方法:

  --1   常用参数

      --1 -v 反选

        eg:grep -v '^#' /etc/inittab

        #删除所有注释行,输出剩余行

      --2 -i 忽略匹配内容大小写

      --3 E 启用扩展正则表达式(匹配模式可调用扩展正则表达式功能)

        eg:grep -iE "^(a|ab|c)" /home/test

        #输出以a或者A,ab(任何大小写组合),c或者C开头的行

      --4 -o 只显示匹配到的内容,而不是所在行

      --5 --color=auto  利用颜色凸显匹配内容

      --6 -A n 显示匹配行+匹配行后面的n行

        -B n 显示匹配行+匹配行前面的n行

        -C n 显示匹配行+匹配行前面的n行+匹配行后面的n行(即A+B参数的合并)

      --7 -n 行首加入行号

        eg:grep -n "^$" test

        #将空白行的行号显示出来

      --8 -w 匹配范围限定为词

        eg:cat goface.txt

            goface

          gofaceme

          grep ’goface’ goface.txt

          goface

          gofaceme

          grep -w ’goface’ goface.txt

          goface

      --9 -R 递归匹配

  --2   正则表达式

      --1 ^ 锚定行守或者[^]取反

      --2 $  锚定行尾

        eg:^和$组合

          grep -v '^$' test

          #删除所有空行,输出剩余行

      --3 () 分组

      --4 |  或

        eg: ()和|组合

          egrep '^(a|ab|c)' /home/test

          #匹配a或者ab或者c开头的行

      --5 . 代表一个任意字符

      --6 * 代表前面紧邻的0或多个匹配

          ? 代表前面紧邻的0或1个匹配

         + 代表前面紧邻的1或多个匹配

      --7 {n} 代表前面紧邻的n个匹配

        {n,}代表前面紧邻的至少n个匹配

        {,n}代表前面紧邻的至多n个匹配

        eg:

        ifconfig | egrep -o 'addr:([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v "127.0.0.1"

        #获取本地网卡ip

          ([0-9]{1,3}匹配任意1-3位数的数字

          \.匹配小数点

          {3} 匹配三组任意1-3位数+小数点

      --8 \<或者\> 锚定词首或者词尾,可单独使用

      --9 字符集

       [:digit:] : 所有数字, 相当于0-9           eg:grep '[[:digit:]]'  匹配所有单个数字,[:digit:]表明0-9,[[:digit:]]表明[0-9],所以即匹配0-9的任意单个数字
              [:lower:]:所有的小写字母,相当于a-z
              [:upper:]:所有的大写字母,相当于A-Z
              [:alpha:]: 所有的字母,相当于a-z,A-Z
              [:alnum:]: 相当于0-9a-zA-Z
              [:space:]: 空白字符
              [:punct:]:所有标点符号

  --3 关于shell通配符、元字符和正则表达式

    通配符、元字符和正则表达式是完全不同的东西,这也是为什么最好需要将grep所匹配的内容用单引号''括起的原因,具体解释如下:

    例如echo '$PATH' | grep --color=auto '\$PATH' 则输出$PATH

      echo '$PATH' | grep --color=auto "\$PATH" 则不会输出任何东西

    解析:

      --1

        针对 echo '$PATH',首先shell解释器解读单引号',获悉之后内容强制转义得$PATH,利用|传导给grep之后,shell解释器看到单引号',得知

        此处命令完全交由grep管理,则grep采用正则表达式进行处理,按照正则的处理方式看到\进行转义,将本来是锚定尾部的$,转义成普通字符$,

        所以输出$PATH

      --2 

        而当使用双引号的时候,shell解释器会先一步将匹配项进行解析,看到转义字符\,将本来是定位变量的$,转义成普通字符$,得到的结果是

        $PATH,然后将$PATH交给grep进行处理,grep利用正则处理,此时$前因为没有了转义字符,故被grep认为是锚定尾部,故没法匹配,什么也

        没有输出

          

       

        

grep;egrep;fgrep的更多相关文章

  1. grep, egrep, fgrep笔记

    grep, egrep, fgrep grep: 根据模式搜索文本,并将符合模式的文本行显示出来.Pattern: 文本字符和正则表达式的元字符组合而成匹配条件 grep [options] PATT ...

  2. grep egrep fgrep命令

    一.grep.egrep.fgrep命令 本文中主要介绍了linux系统下grep egrep fgrep命令和正则表达式的基本参数和使用格式.方法.(注释:文中fg代表例子,) 1.1.基本定义: ...

  3. 【转载】grep,egrep,fgrep详解

    [转载自]http://blog.csdn.net/homking/article/details/6000711 egrep 等价于 grep -E fgrep 等价于 grep -F grep - ...

  4. 【Linux相识相知】文本处理工具之grep\egrep\fgrep及正则表达式

    常说Linux上有文本处理的三剑客,grep.sed和awk,本文就grep做出详细的描述,并引出正则表达式. grep NAME:打印模式匹配的行 SYNOPISIS: grep [OPTIONS] ...

  5. grep, egrep, fgrep - 打印匹配给定模式的行

    总览 SYNOPSIS grep [options] PATTERN [FILE...] grep [options] [-e PATTERN | -f FILE] [FILE...] 描述 DESC ...

  6. Shell命令-文件及内容处理之grep(egrep)、join

    文件及内容处理 - grep(egrep).join 1. grep(egrep):文本过滤工具 grep(egrep)命令的功能说明 grep命令是Linux系统中最重要的命令之一,其功能是从文本文 ...

  7. grep/pgrep/egrep/fgrep

    Differences between grep, pgrep, egrep, and fgrep (Linux): grep grep is an acronym that stands for & ...

  8. Shell的egrep、grep、fgrep命令的使用

    Linux egrep 命令用于在文件内查找指定的字符串.与grep-E使用语法及参数相似,不同点在于解读字符串的方法. 语法: egrep [范本模式] [文件或目录] 参数说明: [范本模式]:查 ...

  9. 文本处理三剑客之 grep/egrep

    grep:文本过滤工具 支持BRE egrep: 支持ERE fgrep: 不支持正则 作用:根据用户指定的“模式”,对目标文本逐行进行匹配检查,打印匹配到的行 模式:由正则表达式字符及文本字符所编写 ...

随机推荐

  1. 丰富的else语句及简洁的with语句 - 零基础入门学习Python034

    丰富的else语句及简洁的with语句 让编程改变世界 Change the world by program 丰富的else语句 有鱼油可能会说,else语句还有啥好讲的?经常跟if语句进行搭配用于 ...

  2. Hdu1092

    #include <stdio.h> int main() { ; while(scanf("%d",&n)){ ) {;} else{ int i,a; ;i ...

  3. Realm

    还在为数据库不能获取最新数据而犯愁?信我,你只是需要一个活着的数据库——Realm 写在前面: 又到一年一度七夕虐狗节,看着大家忍受着各种朋友圈和QQ空间还有现实生活中的轮番轰炸,我实在不忍心再在这里 ...

  4. Google Chrome源码剖析【序】

    [序(本人什么都没做,完全转载)] 开源是口好东西,它让这个充斥着大量工业垃圾代码和教材玩具代码的行业,多了一些艺术气息和美的潜质.它使得每个人,无论你来自米国纽约还是中国铁岭,都有机会站在巨人的肩膀 ...

  5. nginx日志管理与限速

    1.日志简介nginx日志主要有两种:访问日志和错误日志.访问日志主要记录客户端访问nginx的每一个请求,格式可以自定义:错误日志主要记录客户端访问nginx出错时的日志,格式不支持自定义.两种日志 ...

  6. Sql server中Collation conflict问题

    SQL语句查询时select A.Code,A.Name,a.Systemcode,B.ID,B.LogType,B.DMCode,B.IP,B.Department,B.CreateBy,B.Cre ...

  7. .NET 使用unity实现依赖注入

    原文地址:http://www.cnblogs.com/wujy/p/3317795.html 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口 ...

  8. fragment中嵌套viewpager,vierpager中有多个fragment,不显示 .

    fragment中嵌套viewpager,vierpager中有多个fragment,不显示 ... 现在好多应用流行一种布局.底部几个工具栏选项,上面也有类似tab的选项. 底部用RadioGrou ...

  9. JS代码的window.location属性详解

    转载:http://www.5icool.org/a/201105/a564.html 如果你稍微懂一些JS代码,一般都会知道 window.location.href 这个属性.并且用该属性获取页面 ...

  10. poj 1149 pigs(最大流)

    题目大意:迈克在农场工作,农场有 m 个猪舍,每个猪舍有若干只猪,但是迈克不能打开任何一间猪舍.有 n 个顾客前来购买,每个顾客有最大的购买数量,每个顾客可以购买某些猪舍的猪,且顾客可以打开这些猪舍, ...