我是好文章的搬运工,原文来自ChinaUnix,博主scq2099yt,地址:http://blog.chinaunix.net/uid-22312037-id-4217835.html

一、基本用法
        grep是linux中很常用的一个命令,主要功能就是进行字符串数据的对比,能使用正则表达式搜索文本,并将符合用户需求的字符串打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep在数据中查找出一个字符串时,是以整行为单位来进行数据选取的。
1、命令格式
        grep [cinvs] 'patten' filename
2、主要参数
        -c:只输出匹配行的计数。
        -i:不区分大小写(只适用于单字符)。
        -n:显示匹配行及行号。
        -s:不显示不存在或无匹配文本的错误信息。
        -v:显示不包含匹配文本的所有行。

    --o: 只显示正则匹配的文本
3、patten
        要搜索的关键字或正则表达式语句,正则表达式参见后文。
4、简单实例
        #netstat -nap|grep 80
        上面命令查询监听80端口的行。
        #grep -n "world" hello.txt
        查询文件hello.txt中含有"world"字符串的行,并显示行号。
        #grep -n "printf" main.c hello.c world.c
         在源码文件main.c、hello.c和world.c中查询调用了printf函数的行,并显示行号。
        #grep -n "printf" *
        在当前目录的所有文件中查询调用了printf函数的行,并显示行号。也可以指定路径,比如:/usr/local/include/*。
        #grep -r "printf" *
        在当前目录及所有子目录下递归查找调用了printf函数的行,并显示行号。
       
二、正则用法
        grep patten正则表达式主要元字符及使用如下表:

元字符

功能

例子

匹配什么

^

锚定行的开始

/^love/

匹配所有以love开头的行

$

锚定行的结束

/love$/

匹配所有以love 结束的行

.

匹配一个字符

/l..e/

匹配这样的行,这些行包含这样的字符:第一个字符是l,紧跟着两个字符,然后是e

*

代表0个或多个先前字符

/*love/

匹配所有这样的行,有0个或多个空格,空格后跟着love

[]

匹配字符组中的一个字符

/[Ll]ove/

匹配所有包含love或者Love的行

[^]

匹配一个不在范围内的字符

/[^A-Z]ove/

 

<

锚定单词的开始

<love

匹配所有这样的行,这些行包含以love开头的单词(vi和grep支持这个功能)

>

锚定单词的结束

Love>

匹配所有这样的行,这些行包含以love结束的单词(vi和grep支持这个功能)

(..)

标记后面用到的匹配字符

/(love)able1rs/

最多可以使用9个标签。第一个标签是模板最左边的部分。在本例子中,模板love保存的标签为1,后面的1指得就是love;本例子搜索的是这样的行,这些行包含这样的字符,在Loveabel后面跟着lovers

x{m}

M次复制字符x

   

x{m,}

至少m次复制字符x

   

x{m,n}

至少m次,至多n次复制字x

   

w

文字和数字字符,[A-Za-z0-9]

Lw*e

匹配一个L字符,紧跟着0个或多个文字或数字字符,然后是e

W

同上

   

b

单词分界线

bloveb

仅仅匹配单词love

简单实例如下:
        #ls -l | grep '^a'
        通过管道过滤ls -l输出的内容,只显示以a开头的行。
        #grep 'test' d*
        显示所有以d开头的文件中包含test的行。
        #grep '[a-z]\{5\}' aa
        显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
        #grep 'w\(es\)t.*\1' aa
        如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。

三、其它家族
        grep家族除了有grep命令外,还包括egrep和fgrep。
        egrep是grep的扩展,支持更多的正则元字符,具体如下:

+

匹配一个或者多个先前字符

[a-z]+ove

匹配一个或者多个小写字符且后面是ove的,

?

匹配0个或者多个先前字符

Lo?ve

匹配L后面有一个或者没有o,然后是ve

a|b|c

匹配a或b或c

Love|hate

匹配love或hate其中一个

()

字符组

Love(able|rs)(ov)+

匹配loveable或lovers,匹配一个或多个ov

(…)(…)12

标记匹配字符串

(love)ing

标签标记出寄存器的一部分,并稍后替换模板。该模板叫做1,并可反复引用。在表达式中最多可以使用9个这样的标签。例如,模板love被保存在寄存器1中并稍后替换标签叫做1

x{m}

重复字符X,m次,至少m,或者m次和n次之间。

   

x{m,}

     

x{m,n}

     

fgrep是fixed grep或fast grep,它把所有的字母都看作单词,即正则元字符不再特殊,而仅仅表示其自身的字母意思。

[Shell]grep命令的更多相关文章

  1. SHELL —— grep命令+正则表达式

    一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 生活中处处都是正则: 比如我们描述:4条腿 你可能会想 ...

  2. linux shell编程学习笔记(二) --- grep命令

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

  3. Linux Shell脚本入门--grep命令详解

    grep简介<摘自鸟哥,并加以整理.> grep (global search regular expression(RE) and print out the line,全面搜索正则表达 ...

  4. shell脚本--内容查找之grep命令

    grep命令可以检索文件中包含关键字(可以使用正则)的行,默认区分大小写. ubuntu@ubuntu:~/test$ cat test.txt this is linux this is Linux ...

  5. Shell常用命令find、grep总结

    一.find 命令 find 命令的常用形式可以简化为 find [path...][expression] path:find 命令查找的目录路径,其中 ./ 表示当前目录,/ 表示系统根目录 ex ...

  6. Linux Shell基础 管道符和grep命令

    概述 管道符:管道符使用"丨"代表.如"命令1丨命令2".表示命令 1 的正确输出作为命令 2 的操作对象.命令 1 必须有正确输出,而命令 2 必须可以处理命 ...

  7. shell编程之grep命令的使用

    大家在学习正则表达式之前,首先要明确一点,并把它牢牢记在心里,那就是: 在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,不要把二者搞混了.切记!!! 通常有三种文本处理工具/ ...

  8. Linux Shell 脚本学习第一天: 使用grep 命令,lsusb, ps -ef, 实现树莓派(Debian OS)时检测到依赖的USB设备启动后,启动终端自动执行shell脚本

    1.应用背景: 无人监测的设备,常需要设置应用程序开机启动,程序启动前需要保证调用的设备先启动,运行环境先启动. 2.test.sh部分源码 #!/bin/sh #查看桌面是否启动 while tru ...

  9. Shell基本语法---处理海量数据的grep命令

    grep命令 shell脚本三剑客之一 grep应用场景:通常对数据进行 行的提取 语法:grep [选项] [内容] [file] -v 对内容进行取反提取 -n 对提取的内容显示行号 -w 精确匹 ...

随机推荐

  1. 面向对象程序的设计原则--Head First 设计模式笔记

    一.找出应用中可能需要变化的地方,把它们独立出来,不要和那些不需要变化的代码混在一起. 把会变化的部分取出并“封装”起来,好让其他部分不会受到影响.这样,代码变化引起的不经意后果变少,系统变得更有弹性 ...

  2. ios 视图的旋转及应用

    有时候,需要做出如下图所示的效果,这就需要用到视图的旋转了 1.首先将旋转的值由角度转换为弧度: #define degreesToRadinas(x) (M_PI * (x)/180.0) 注:M_ ...

  3. android xml布局文件中tools:layout的作用

    摘要 用最新版本的adt 创建一个基于master/detail flow 模版的app的时候,生成的 activity_item_list.xml 文件中有一个tools:layout属性: fra ...

  4. 转:3.3V和5V电平双向转换——NMOS管

    分简单,仅由3个电阻加一个MOS管构成,电路图如下: 此电路来自于飞利浦的一篇设计指导文档,是I2C总线官方推荐使用的电平转换电路.在实际使用过程中,需要尤其注意NMOS管的选型以及上拉电阻阻值的选取 ...

  5. PHP面向对象——构造函数、析构函数

    在PHP中构造函数和析构函数是固定的,如下: // 构造函数 function __construct([argument1,argument2,...,argumentN]){ /* Class i ...

  6. oracle查询数据库资源位置

    archival log list; 归档日志文件位置 select file_name from dba_data_files; 查询数据库文件位置 select parameter control ...

  7. 重新编译Nginx指导手册【修复静态编译Openssl的Nginx漏洞 】(转)

    1. 概述    当前爆出了Openssl漏洞,会泄露隐私信息,涉及的机器较多,环境迥异,导致修复方案都有所不同.不少服务器使用的Nginx,是静态编译opensssl,直接将openssl编译到ng ...

  8. ios何时使用self.

     本文转载至  http://blog.csdn.net/lvxiangan/article/details/27204265   何时使用self.在网上搜索或者论坛里的回复大多都是简简单单的说这与 ...

  9. loadrunner动态从mysql取值 [需要下载跟数据库服务器一致的dll,32位或64位]

    loadrunner中有参数化从数据库中取值,但是只是静态的,对于一些要实时取值的数据就game over了,比如取短信验证码,因为MySQL中有一个libmysql.dll,里面提供了可以操作数据库 ...

  10. 五个知识体系之-SQL学习-第一天

    1. 创建数据库 CREATE DATABASE test1; 2. 删除数据库 DROP DATABASE test1; 3. 创建表 CREATE TABLE tabname (userid BI ...