Grep 文本搜索工具与正则表达式

        grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Grep在实际中对于我们的工作有着很大的作用,用于对文件的搜索,通过由正则表达式字符以及文本字符所编写的过滤条件来获取我们想要查找的行或关键信息。

Grep语法

  grep
[OPTIONS] PATTERN [FILE…]     
  

             -n :显示行号

-i :忽略字符的大小写

-o :仅显示匹配到得字符串

-e :指定多个匹配条件(或的关系)

-c :显示统计到的行数   类似于 wc -l 的功能

-v :取反功能,匹配出不包含“PATTERN”的行

-q :静默输出,不输出任何信息,只关心执行结果

-A # after,匹配到的行的后#

-B #  :  before,匹配到的行前#

-C # context,匹配到得行前后各#

-E ==egrep 支持扩展的正则表达式   -F ==fgrep,快速搜索

而且egrepfgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed
grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式
中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-E、-F命令行选项来使用egrep和fgrep的功能。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

Grep命令中允许指定的串语句是一个规则表达式,这是一种允许使用某些特殊键盘字符的指定字符串的方法,这种方法中的特殊键盘字符可以用于代表其他字符也可以进一步定义模式匹配工作方式。例如:grep “.*hood” essay1。该命令将在文件essay1中搜索,显示出包含带有字符串hood的字的每一行。命令行中的点表示的是hood之前可以有任意字符,星号指的是在字符串之前点号所表示的任意字符可以有任意个其中的双引号是可有可无的,但是当语句中包含短语或者空格时就必须加双引号

         正则表达式分为两类

                            基本正则表达式:BRE

                            扩展正则表达式:ERE

基本正则表达式

字符匹配

      . :匹配任意单个字符;

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

         有以下几种表示方法:

                                               [:digit:] :表示所有数字;

                                               [:upper:]: 表示所有大写字母;

                                               [:lower:]:表示所有小写字母;

                                               [:alpha:]:表示所有的字母;

                                               [:alnum:]:表示所有的字母和数字;

                                               [:punct:]:表示所有的标点符号;

                                               [:space:]:表示所有的空白字符;

                                               [1-9]:表示19的数字,包括19

                                               [a-z]:表示为 a A b B c C … z Z中任意一个字母。

[^] : 匹配除指定范围内的任意单个字符;例如:[^zhang]:表示除zhang之外的字母

     次数匹配

     *:表示匹配前面的字符任意次;(贪婪模式,能匹配多少就匹配多少)

         例如:grep  “x*y” ———可以是xayxcsy,也可以是x2aty,但是x不可以,y不可以。

    .* : 表示任意长度的任意字符;

    \?: 表示匹配前面的字符01次,即可有可无;

    \+: 匹配前面的字符至少一次;

    \{m\}: 匹配前面的字符m次;

    \{m,n\}: 匹配前面的字符至少m次,最多n次;

    \{m,\}:匹配前面的字符至少m次;

    \{0,n\}: 匹配前面的字符最多n次。

    位置锚定

    对特定位置进行定位

             ^
:
行首锚定; $: 行尾锚定;—— ^$ 表示匹配空白行(不包含空格);^[[:space:]]$ 包含空格的空行。

             \<\b :词首锚定; \>\b :词尾锚定 —— 例如:\<PATTERN\> 匹配整个单词

 

    分组

             分组是将多个字符捆绑在一起,当做一个整体进行处理:\( \)  例如:\(xy\)* 表示xy这个整体可以出现任意次 ,后边用\1,\2..来分别表示之前从左边开始括起来的每一组  

 示例:      

1、显示/proc/meminfo文件中以s(不区分大小写)开头的行

Grep 文本搜索工具与正则表达式

Grep 文本搜索工具与正则表达式

Grep 文本搜索工具与正则表达式

2、显示/etc/passwd文件中其默认shell不是/sbin/nologin的用户

Grep 文本搜索工具与正则表达式

3、找出/etc/passwd文件中的一位数或两位数

Grep 文本搜索工具与正则表达式

Grep 文本搜索工具与正则表达式

4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面至少跟一个空白字符,而又至少一个空白字符的行

Grep 文本搜索工具与正则表达式

5、找出当前系统上用户ID和属组ID相同的用户

Grep 文本搜索工具与正则表达式

扩展正则表达式

   grep
–e ‘PATTERN’ FILE…

   egrep
‘PATTERN’ FILE…

       字符匹配字符锚定与基本正则相同

         次数匹配

                   ?:表示01次;

                   +:至少一次;

                   {m}:精确匹配m次;

                   {nm}:至少m次,最多n次;

                   {0m}:最多m次;{n}:至少n次。

                   其他与基本相同

         或者

                a|b

         分组()括号无需转义。

示例:

找出ifconfig命令结果中1-255之间的数字

Grep 文本搜索工具与正则表达式

原创文章,作者:Immortals、zcy,如若转载,请注明出处:http://www.178linux.com/73360

(0)
Immortals、zcyImmortals、zcy
上一篇 2017-04-15
下一篇 2017-04-16

相关推荐

  • Vim编辑器解析

    vim编辑器 概述:   VIM即ViIMproved:vi的增强版 ,vim是模式化的编辑。   vi:Visual lnterface,是一种文本编辑器,所谓文本编辑数据是基于字符编码的文件,常见的编码 有ASCII编码,UNICODE编码。 种类:   行编辑器:所谓行编辑器是指一行行来编辑处理的工具   全屏编…

    Linux干货 2016-08-10
  • Nginx相关实战案例

    Nginx相关实战案例: Nginx在实际生产中极为重要,先来看一下Nginx配置文件nginx.conf中文详解 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数。 worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn |…

    Linux干货 2017-06-19
  • Linux 基础(6)—— 权限

    修改所属人,所属组                文件的 r w x 权限            修改文件的权限chmod          umask &nb…

    2017-07-27
  • linux终端类型

    人机交互界面:GUI、CLI GUI: gnome:c,gtk kde:c++,qt CLI: bash,zsh,sh,csh,ksh 不同CLI间跳转:alt+f1\f2\f3\f4   终端类型: 物理终端、控制台终端:/dev/console,控制台console 计算机显示器通常被称为控制台终端(Console) 虚拟终端:/dev/tty…

    Linux干货 2016-10-14
  • redis-cli的一些有趣也很有用的功能

    redis-cli我们最常用的三个参数就是-h、-p、-a选项,分配用来指定连接的redis-server的host、port和登录密码。通过redis-cli –help发现,redis-cli还提供了其他很多的参数和功能。 1)-x-x选项从标准输入(stdin)读取最后一个参数。 比如从管道中读取输入: echo -en &quot…

    Linux干货 2016-04-13
  • Linux基础命令 -管道密切配合使用 tee

    基础命令和管道密切配合使用  tee     基础命令:tee   tee命令 功能: 把命令1的STDOUT保存在文件名中,然后管道输入给命令2; 补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。 使用场景: 1.保存不同阶段的输出 2.复杂管道的故障排除 3.同时查看和记录…

    Linux干货 2016-08-03

评论列表(1条)

  • renjin
    renjin 2017-04-21 11:19

    主要介绍了grep命令的详细用法及示例说明,内容总结的很详细,排版也很好。继续努力 !