grep及正则表达式用法总结

一、grep的基本用法

????????grep是一个常见的文本选取工具,它可以将一段数据分析后,取出我们想要的,或者是经由关键字、正则表达式匹配选出我们想要的那一行。grep的用法及选项如下所示:

grep:文本过滤工具
用法1:grep [OPTIONS] PATTERN [FILE...]
用法2:grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
    -v:取反,显示文本中没有被PATTERN匹配上的所有行
    -i:匹配是忽略字符大小写
    -n:匹配出的行显示行号
    -c:只显示被匹配到的内容的行数
    -o:只显示行中被模式匹配到的字符串
    -q:静默模式,不输出结果,只返回匹配结果,常用于shell编程
    -e:实现多个选项的逻辑或关系,即or关系
    -A NUM:显示匹配到的行及其后NUM行
    -B NUM:显示匹配到的行及其前NUM行
    -C NUM:显示匹配到的行及其前后各NUM行
    -w:匹配整个单词
    -E:开启扩展正则表达式
    -f:以前一个文件的内容作为模板,找出后面文件和前面文件的交集
    -F:相当于fgrep,不支持正则表达式,速度更快

二、基本正则表达式的语法

????????基本正则表达式大致可分为五类字符,包括:

- 1、元字符
    - . :匹配除换行符之外的任意单个字符,与通配符的?类似
        注意:如果需要在正则中表示".",那么可以用\或者[.]
    - [] :匹配指定范围内的单个字符
    - [^] :陪陪指定范围外的单个字符
    - [:space:] :数字0-9
    - [:punct:] :标点符号集合
    - [:lower:] :小写字母
    - [:upper:] :大写字母
    - [:alpha:] :大小写字母
    - [:digit:] :数字
    - [:alnum:] :数字+大小写字母  
- 2、次数匹配字符
    - * :匹配其前面的字符任意次(0-n)
        常见用法 :".*"表示任意长度的任意字符
    - \? :匹配其前面的字符0次或1次
    - \+ :匹配其前面的字符至少1次
    - \{n\} :匹配其前面的字符n次
    - \{n,\} :匹配其前面的字符至少n次
    - \{,m\} :匹配其前面的字符至多m次
    - \{n,m\} :匹配其前面的字符至少n次,至多m次
- 3、位置锚定字符
    - ^ :行首锚定
    - $ :行尾锚定
    - \<或\b :单词首部锚定
    - \>或\b :  单词尾部锚定
    特殊用法:
        "^$" :表示匹配空行(不是空白行)
        "^[[:space:]]*$" :表示匹配空白行
- 4、分组
    - \(ab\) : 将括号内的字符作为一组,其后可以使用\\1、\\2、\\3来对前面的分组进行引用:
        - \1 :对前面第一个分组进行引用
        - \2 :对前面第二个分组进行引用
        - \3 :对前面第三个分组进行引用
    当然在分组后面也可以使用次数匹配字符对分组中的字符或字符串进行次数匹配
- 5、或者
    - a \| b:表示a或者b
    - C \| cat:C或者cat
        注:这里或关系表示的"|"两边的单词而不是字符
    - (C\|c)at:Cat或者cat
        注:向表示两边的字符得把字符用()括起来

三、扩展正则表达式

????????事实上,我们只要了解了基本正则表达式就够用了,但某些时候,我们为了简化命令操作,使用扩展正则表达式会更方便呢!
????????扩展正则表达式和基本正则表达式没有很大区别,扩展正则表达式为方便阅读,取消了大部分字符需要的转译操作,下面我们来看一看扩展正则的基本用法:

- 1、元字符

    - 与基本正则表达式没有任何区别
- 2、次数匹配字符
    - * :匹配其前面的字符任意次(0-n)
    - ? :匹配其前面的字符
    - + :匹配其前面的字符至少一次
    - {n} :匹配其前面的字符n次
    - {n,} :匹配其前面的字符至少n次
    - {,m} :匹配其前面的字符至多m次
    - {n,m} :匹配其前面的字符至少n次,至多m次
- 3、位置锚定字符
    - ^ :行首锚定
    - $ :行尾锚定
    - \<或\b :单词首部锚定
    - \>或\b :  单词尾部锚定
- 4、分组
    - (ab) : 将括号内的字符作为一组,其后可以使用\\1、\\2、\\3来对前面的分组进行引用:
        - \1 :对前面第一个分组进行引用
        - \2 :对前面第二个分组进行引用
        - \3 :对前面第三个分组进行引用
    当然在分组后面也可以使用次数匹配字符对分组中的字符或字符串进行次数匹配
- 5、或者
    - a | b:表示a或者b
    - C | cat:C或者cat
    - (C | c)at:Cat或者cat

四、grep的用法及常用选项演示

????????下面我将以/app/passwd文件来演示grep一些常见选项的用法。/app/passwd文件内容如下所示:

1、-v选项是用来显示未被模式匹配到的内容的选项,我们使用grep "root" /app/passwd命令来筛选除文件中包含root的行,结果如下所示:

但是使用-v选项之后,在看结果,就是显示未被模式匹配到的行了:

2、如果不加-i选项,模式中的内容默认是区分大小写的,所以如果我们使用grep "Root" /app/passwd命令应该是匹配不到任何内容的,如果加上-i选项,可以使模式中的内容不再区分大小写,结果展示如下:

3、-n就是显示被匹配大的内容在文中的行号,演示如下:

4、使用-c选项即用来显示被匹配到内容的行数,所以我们使用grep -c "root" /app/passwd命令应该只会显示出1,演示如下:

5、使用-o选项可以起到只显示被模式匹配到的字符串的效果,而不是去显示被模式匹配到的字符串所属的哪一行,使用与不适用-o选项的效果分别如下:

6、-q为开启静默模式,即使模式能匹配到内容,也不显示输出结果,常用于shell编程,作为判断条件使用,在此不做演示

7、-A|B|C效果类似,即不单单显示被匹配上的行,还显示其周边的行,在此以-A为例进行演示:

8、-w为匹配整个单词,即"root"这种模式在不加-w这种情况下,不仅会把含root的行筛选出,也会把含有rooter的行筛选出来:

9、-E为开启扩展正则表达式,即PATTERN中的语法为扩展正则的语法

10-f以前一个文件为模板,匹配出后面文件与之相同的行,演示如下:

五、grep集合正则表达式的一些常见用法

????????<font size=3>介绍完grep的基本用法之后,我们来看以看grep和正则结合起来的一些常见用法:</font>

1、显示/proc/meminfo文件中以大小写s开头的行
# grep "^[sS]" /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
# grep -v "/bin/bash$" /etc/passwd
3、如果root用户存在,显示其默认的shell程序
# grep "^root\>" /etc/passwd | cut -d: -f7
4、找出/etc/passwd中的两位或三位数
# grep -owE "([1-9][0-9])|([1-9][0-9][0-9])" /etc/passwd
5、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行
# grep "^[[:space:]][^[:space:]]+" /etc/rc.d/rc/sysinit
6、找出"netstat -tan"命令的结果中以"LISTEN"后跟0、1或多个空白字符结尾的行
# netstat -tan | grep -E "LISTEN([0|1])|([[:space:]])"
7、显示当前系统root、centos或user1用户的默认shell和UID
# grep -owE "^root|centos|user1" | cut -d: -f1,3,7
8、找出/etc/rc.d/init.d/functions文件(centos6和7)中某单词后面跟一个小括号的行,也即使是找出函数名
# grep -oEw "[[:alnum:]]+\(\)" /etc/rc.d/init.d/functions
9、使用echo输出一绝对路径,使用egrep取出其基名
# echo "/etc/init.d/" | grep -owE "[^/]+/?$" | cut -d "/" -f1
10、使用echo输出一绝对路径,使用egrep取出其路径名
# echo "/etc/init.d/init/suibian/dage" | grep -oE "^/[^/]+.*[^/]" | grep -oE "^/[^/]+.*/"
11、找出ifconfig命令中1-255之间的数值
# grep -owE "\<(([0-9])|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))\>"
12、找出ifconfig命令中的IP地址
# ifconfig | grep -owE "((\<([0-9])|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])\>)[.]){3}(\<([0-9])|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])\>)"

原文地址:http://blog.51cto.com/13547664/2154999

时间: 2024-10-05 21:54:28

grep及正则表达式用法总结的相关文章

正则表达式和grep命令的用法

正则表达式和grep命令的用法: 一.正则表达式: 正则表达式(也称为regular Expression,简称RE)就是由普通字符(例如字符a到z)以及特殊字符(称之为元字符)组成的文字模式. 该模式描述在查找文字主体时待匹配的一个或多个字符串. 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.简单的说,正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表示通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程序.vim.gr

grep, egrep及相应的正则表达式用法详解

grep, egrep及相应的正则表达式用法详解 一.grep/egrep Global search REgular expression and Print out的简写,是一种强大的文本搜索工具,它根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. linux使用GNU版本的grep.它功能更强,可以通过-E.-F命令行选项来使用egrep和fgrep的功能(fgrep不使用

grep用法详解 grep与正则表达式

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 主要参数    [options]主要参数:    -c:只输出匹配行的计数.    -I:不区分大 小写(只适用于单字符).    -h:查询多文件时不显示文件名.    -l:查询多文件时只输出包含匹配字符的文件名.    -n:显示匹配行及 行号.    -s

Linux grep,egrep及相应的正则表达式用法详解

linux在进行文本处理过程中的文本搜索工具称为正则表达式.文本搜索工具有grep.egrep.fgrep,egrep为正则表达式的扩展正则表达式,fgrep用于搜索文本字符串,与 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式.grep的含义为: global search Regular expression and Print out the line. 正则表达式(REGular EXPression REGEXP)是由元字符及正常字符所书写的模式,其中的

Linux &nbsp; &nbsp; grep命令,正则表达式

grep命令及正则表达式 grep命令 grep , egrep , fgrep grep,sed,awk 文本处理三剑客 grep: Global search REgular expression and Print out the line;全面查找正则表达式并将匹配到的行显示出来; 正则表达式 正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用;许多程序设计语言都支持利用正则表达式进行字符串操作; 主流的正则引擎又分为三类:DFA;传统型NFA;POSIX NFA; DFA

grep与正则表达式,grep、egrep和fgrep

grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大:1基础正则表达式grep 工具,以前介绍过.grep -[acinv]   '搜索内容串'   filename-a 以文本文件方式搜索-c 计算找到的符合行的次数-i 忽略大小写-n 顺便输出行号-v

grep与正则表达式

一.grep简介 二.基本正则表达式 三.egrep扩展正则表达式 四.其他文本及查看工具{wc,cut,sort,uniq,diff,patch} 五.练习用例 一.grep简介 文本处理工具: Linux上文本处理三剑客: grep:文本过滤工具(模式:pattern) grep:基本正则表达式,-E扩展,-F egrep:扩展正则表达式,-G基本,-F fgrep:不支持正则表达式, sed:stream editor,流 编辑器 awk:Linux上实现的为Gawk,GNU/awk,文本

Linux基础--grep与正则表达式

grep的基本用法可以参照此[链接]中的文档,写的很详细了,这里主要说明正则表达式的用法. grep默认支持基本正则表达式(BRE)和扩展的正则表达式(ERE). fgrep不支持正则表达式,不需要加载正则表达式引擎,因此速度较快. egrep只支持扩展的正则表达式(ERE). 'egrep' means 'grep -E'.  'fgrep' means 'grep -F'. 扩展的正则表达式(ERE)与基本正则表达式(BRE)的区别并不大,BRE中的匹配规则在ERE中同样适用,只是ERE在使

Linux中find、grep命令详细用法

在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 find命令的常用选项及实例 find与xargs grep命令 grep命令的一般形式 grep正则表达式元字符集(基本集) grep命令的常用选项及实例 1.find命令 find命令是一个无处不在命令,是linux中最有用的命令之一.find命令用于:在一个目录(及子目录)中搜索文件,你可以