大家在学习正则表达式之前,首先要明确一点,并把它牢牢记在心里,那就是:

在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,不要把二者搞混了。切记!!!

通常有三种文本处理工具/命令:grep、sed、awk,它们三者均可以解释正则。下面我就为大家介绍grep命令的使用方法。

一、使用grep命令搜索文件中的内容

grep和egrep命令能够在一个或多个文件的内容中搜索某一特定的字符模式,也被称为正则表达式(regular expressions)。一个模式可以是一个单一的字符、一个字符串、一个单词或一个句子。

一个正则表达式是描述一组字符串的一个模式。正则表达式的构成是模仿了数学表达式,通过使用操作符将较小的表达式组合成一个新的表达式。一个正则表达式既可以是一些纯文本文字,也可以是用来产生模式的一些特殊字符。为了进一步定义一个搜索模式,grep命令支持以下几种正则表达式的元字符,也称通配符。

ps:正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

c*:将匹配0个或多个字符c

.:将匹配任何一个且只能是一个字符(换行符除外)

[xyz]:将匹配方括号中的任意一个字符

[^xyz]:将匹配不包括方括号中的字符的所有字符

^:锁定行的开头

$:锁定行的结尾

在基本正则表达式中,如元字符*、+、{}、|、和()已经失去了它们原来的意义,如果要回复他们原本的含义要在之前冠以反斜线\,如\*、\+等。

grep命令是用来在每一个文件中或标准输出上搜索特定的模式。当使用grep命令时,包含一个指定字符模式的每一行都会被打印在屏幕上,grep命令的语法格式如下:

grep 选项 模式 文件名

其中,选项可以改变grep命令的搜索方式,除了-w选项外,其他的每个选项都可以在egrep和fgrep命令中使用。grep命令常用选项如下:

-c(count):仅列出包含模式的行数

-i(ignore):忽略模式中字母大小写

-l(list):列出带有匹配行的文件名

-n:在匹配行的前面列出行号

-v:列出没有匹配模式的行(取反)

-w:把表达式当做一个完整的单字来搜索,忽略那些部分匹配的行

-q  :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

-A n  :如果匹配成功,则将匹配行及其后n行一起打印出来

-B n  :如果匹配成功,则将匹配行及其前n行一起打印出来

-C n  :如果匹配成功,则将匹配行及其前后n行一起打印出来

ps:如果搜索的是多个文件,grep命令的结果只显示在文件中发现匹配模式的文件名;

如果搜索的是单个文件,grep命令的结果将显示每一个包含匹配模式的行。

上面就是grep命令的基本使用方法。但是有时一个简单的正则表达式无法定位你要搜索的内容,如要搜索同时满足模式一和模式二的数据行,这时egrep命令就可以派上用场。

egrep命令的语法格式和grep命令相同。但是egrep命令是用来在一个或多个文件的内容中利用扩展的正则表达式的元字符搜索特定的模式。扩展的正则表达式的元字符包含了grep命令中使用的正则表达式元字符的同时,还增加了一些额外的元字符,大致有下面几个:

+:匹配一个或多个前导字符

a|b:匹配a或b

(RE):匹配括号中的正则表达式RE

下面我将通过一些基本的例子来增进大家对grep和egrep命令用法的了解。鉴于grep命令中所有的选项egrep都能够使用(egrep更加强大),为方便起见我将使用egrep命令为大家演示:

例一:显示出文件/etc/passwd含有root的行

例二:输出/etc/passwd中任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容

例三:显示出/etc/passwd中有多少行含有nologin

例四:显示出/etc/passwd中那些行含有root,并将行号一块输出

例五:

新建用户abominable、abominate、anomie、atomize,编写正则表达式,将他们匹配出来

例六:新建用户Alex213sb、Wpq2222b、yH438PIG、egon666、egon过滤出用户名组成是字母+数字+字母的行

例七:显示出/etc目录下所有包含root的文件名

例八:过滤掉/etc/ssh/sshd_config内所有注释和所有空行

以上例子只是很小的一部分,大家只要勤加练习,一定很快就能掌握grep命令的使用啦 ^^

shell编程之grep命令的使用的更多相关文章

  1. shell编程之awk命令详解

    shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...

  2. shell编程之echo命令

    Linux echo命令不能显示文件中的内容.显示字符串或者变量功能说明:显示文字.语 法:echo [-ne][字符串]或 echo [--help][--version]补充说明:echo会将输入 ...

  3. shell编程之trap命令

    trap command  signal trap捕获信号(软中断),command一般是linux命令 若为' '表示发生陷阱时为空指令,'-'表示发生陷阱时采用缺省指令 signal: HUP(1 ...

  4. 03 shell编程之case语句与函数

    本文所有内容均来自当年博主当年学习笔记,若有不足欢迎指正 Shell编程之case语句与函数 学习目标: 掌握case语句编程 掌握shell函数的使用 目录结构: Case语句 Case语句的作用 ...

  5. shell编程之case分支语句

    shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 ...

  6. shell编程之if语句

    shell编程之if判断 目录 shell编程之if判断 1.整数比较 2.字符串比较 3.举例 1.数字比较 2.字符串比较 4.Other 1.整数比较 -eq 等于,如:if [ "$ ...

  7. shell编程之echo printf 命令

    shell中 echo 和printf 都能用作输出,printf可以算是echo的增强版 显示转义字符 echo \""abcdef\"" >>& ...

  8. shell编程之SHELL基础(1)

    shell脚本基础 shell是一个命令行解释器,她为互用提供了一个想linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动.挂起.停止甚至编写一些程序. shell还是一个功 ...

  9. shell编程之helloworld

    /bin/sh与/bin/bash的区别sh:如果前面有语句报错,则报错语句后面的命令不执行bash:如果前面有语句报错,后面的命令也会执行sh跟bash的区别,实际上就是bash有没有开启posix ...

随机推荐

  1. 《深入理解PHP内核》

    http://www.php-internals.com/ http://www.cnblogs.com/zcy_soft/category/252731.html

  2. 例说linux内核与应用数据通信系列

    [版权声明:尊重原创.转载请保留出处:blog.csdn.net/shallnet.文章仅供学习交流,请勿用于商业用途] 本系列通过源代码演示样例解说linux内核态与用户态数据通信的各种方式: 例说 ...

  3. 古代password

    古代password 个人信息:就读于燕大本科软件project专业 眼下大三; 本人博客:google搜索"cqs_2012"就可以; 个人爱好:酷爱数据结构和算法.希望将来从事 ...

  4. 有用 .htaccess 使用方法大全

    这里收集的是各种有用的 .htaccess 代码片段,你能想到的使用方法差点儿全在这里. 免责声明: 尽管将这些代码片段直接复制到你的 .htaccess 文件中,绝大多数情况下都是好用的,但也有极个 ...

  5. 编程算法 - 求1+2+...+n(函数继承) 代码(C++)

    求1+2+...+n(函数继承) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 求1+2+...+n, 要求不能使用乘除法\for\whi ...

  6. Handling PnP Paging Request

    The following explains why the DO_POWER_PAGABLE bit must be set on the way down and not on the way u ...

  7. C#邮件发送(含附件)

    class SendEmail { static void Main(string[] args) { string from = "发件人@yingu.com"; string ...

  8. InnoDB: Error: log file .\ib_logfile0 is of different size 0 10485760 bytes

    启动WAMP Server的时候报例如以下的错误: 140618 23:12:32 [Note] Plugin 'FEDERATED' is disabled. 140618 23:12:32 Inn ...

  9. 还在自建Redis缓存?那你就out了

    Redis 是什么?简单来说,Redis是一个开源的内存数据库,支持Key-Value等多种数据结构,可用于缓存.事件发布或订阅.高速队列等场景.Redis使用ANSIC语言编写,支持网络,提供字符串 ...

  10. ios3--UIView的常见方法

    // // ViewController.m // 07-UIView的常见方法 // #import "ViewController.h" @interface ViewCont ...