grep简介

grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。通常grep有三种版本grep、egrep(等同于grep -E)和fgrep。egrep为扩展的grep,fgrep则为快速grep(固定的字符串来对文本进行搜索,不支持正则表达式的引用但是查询极为快速)。grep是Linux文本处理三剑客之一。

grep使用方式

 常用选项:  –color=auto:对匹配到的文本着色后进行高亮显示;
-c:只输出匹配的行数 
-i:匹配时忽略大小写
-h:多文件匹配时不显示文件名,默认显示、
-l:只列出符合匹配的文件名,而不显示匹配的行内容
-n:显示行号、
-s:不显示错误消息
-q:禁止输出任何结果,以退出状态表示搜索是否成功 $? 查看,值0或者1
-v:取反,显示不包含匹配文件本的所有行
-o:只显示被匹配到的字符串
-C n:显示匹配字符前后面的行数
-A n:显示匹配字符后面的行数
-B n:显示匹配字符前面的行数 n:数值
-e : 实现多个参数之间的 ‘或’ 的关系 eg: grep -e root -e bash /ect/passwd
-w : 匹配单词

注:使用grep匹配时需使用双引号引起来(单引号为强引用),防止被系统误认为参数或者特殊命令而报错。

扩展grep使用方式

使用方式:egrep [OPTIONS] PATTERN [FILE…]

或 grep -E [OPTIONS] PATTERN [FILE…]

扩展正则表达式在基本正则表达式上进行了修改,主要取消反斜线转移,更容易看

字符匹配:

.: 任意单个字符
[]: 指定范围内的任意单个字符
[^]: 指定范围外的任意单个字符

次数匹配:

*:匹配其前面的字符任意次;
?: 匹配其前面的字符0或1次;
+: 匹配其前面的字符至少1次
{m}: 匹配其前面的字符m次;
{m,n}: 至少m次,至多n次
{m,}: 至少m次;
{0,n}:至多n次;

锚定:

^: 行首
$: 行尾
\<, \b: 词首
\>, \b:词尾

分组:

(): 分组
|: 或者, ac|bc
grep -E "con(C|c)at" 匹配conCat或concat
                

grep基本正则表达式元字符

匹配次数

  *:前一个字符出现任意次数,包括0次
.* :任意字符出现任意次数
\?:前一个字符出现1次或者0次
\+:出现1次或者1次以上
\{n\}:精确匹配次数
\{m,n\}:匹配m到n次之间
\{n,\} :匹配最少n次以上
\{,n\} :匹配最多n次以上
[a-z]\+ : 任意一个字符至少出现一次 ;
. 在[]中没有任何意义,就是点本身

位置锚定

^ : 匹配行首
$ ; 匹配行尾
^$: 匹配空白行
[^]:取反匹配

分组

    \(匹配内容\) :匹配括号内的内容
\n (数字) :重复前面匹配的内容再匹配
eg:匹配开头行和结尾行一样的行
[root@yufu ~]# grep "^\(.*\):.*/\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

后向引用:引用前面的分组括号中的模式所匹配到的字符 分组括号中的模式匹配到的内容或被正则表达式引擎自动记录于内部的变量中: \1:模式从左侧起,第一个左括号及与之匹配的右括号之间模式匹配到的内容 \2:模式从左侧起,第二个左括号及与之匹配的右括号之间模式匹配到的内容…

扩展正则表达式与正则表达式略有不同:
‘[]’:依旧匹配指定范围内的任意单个字符;但是有很多特殊匹配方式。
[:digit:] 匹配任意单个数字
[:lower:] 匹配任意单个小写字母
[:upper:] 匹配任意单个大写字母
[:alpha:] 匹配任意单个字母
[:alnum:] 匹配任意单个字母或数字
[:punct:] 匹配任意单个符号
[:space:] 匹配单个空格
一些地方取消了转义字符的使用:
‘?‘:匹配其前面的字符0次或者1次;
‘+’:匹配其前面的字符1次或者多次;
‘{m}‘:匹配其前面的字符m次(\为转义字符)
‘{m,n}’:匹配其前面的字符至少m次,至多n次
():将一个或多个字符捆绑在一起,当做一个整体进行处理,反向引用照常使用。
‘|’:或(注:‘C|cat’为C与cat,‘(C|c)at才是Cat与cat’)

一些例子

1.显示/proc/meminfo文件中以大小写s开头的行
[root@localhost ~]#cat /proc/meminfo | grep -io "^[s].*"
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 6900 kB
Slab: 36828 kB
SReclaimable: 18184 kB
SUnreclaim: 18644 kB
2.取出默认shell为非bash的用户
[root@localhost ~]#cat /etc/passwd | grep -v "[bash]$" | cut -d : -f 1
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
...省略...
3.取出默认shell为bash的且其ID号最大的用户
[root@localhost ~]#cat /etc/passwd | grep "bash$" | cut -d: -f 3 | sort -nr | head -1
1003
4.显示/boot/grub/grub.conf中以至少一个空白字符开头的行
[root@yufu ~]# cat /boot/grub/grub.conf | grep "^[[:space:]]\+"
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=96cb6b8f-c3da-41d1-a063-cfd0e8177085 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
5.找出/etc/passwd文件中一位数或两位数
[root@yufu ~]# cat /etc/passwd | grep -o "\<[0-9][0-9]\>"
12
10
14
11
12
13
30
14
50
99
99
81
81
69
...省略...
6.找出ifconfig命令结果中所有ip地址
[root@yufu ~]# ifconfig | grep -o "[0-9.]\{7,\}"
192.168.214.187
192.168.214.255
255.255.255.0
127.0.0.1
255.0.0.0
7.添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户
[root@yufu ~]# cat /etc/passwd | grep -E "^\<([[:alpha:]]{1,})\>:.*\1$"
或者:[root@yufu ~]# cat /etc/passwd | grep -E "^\<([a-zA-Z]{1,})\>:.*\1$"
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
8.统计/etc/rc.d/rc.sysinit文件中以#开头的行的行数,以及空白行的行数
#开头的行
[root@yufu ~]# grep "^#.*" /etc/rc.d/rc.sysinit | wc -l
44
#空行
[root@yufu ~]# grep "^$" /etc/rc.d/rc.sysinit | wc -l
100
9.利用df和grep,取出磁盘各分区利用率,并从大到小排序
[root@yufu ~]# df -h | grep "^/dev" | grep -o "[0-9]\+%" | grep -o "[0-9]\+" | sort -nr 
29
21
1

grep与正则表达式使用的更多相关文章

  1. Linux grep与正则表达式

    grep命令         格式:grep [-acinv] [--color=auto] '查找字符串' filename -a 将binary文件以text文件的 -c 计算找到 ‘查找字符串’ ...

  2. grep和正则表达式

    正则表达式示例表字 符 意 义 示 例* 任意长度的字符串. a* 表示: 空字符串.aaaa.a…? 长度为0或者1的字符串. a? 表示: 空字符串和a.+ 长度为一个或者多个的字符串. a+表示 ...

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

    grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串. ...

  4. 第5天(半天)【shell编程初步、grep及正则表达式】

    第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...

  5. [Linux 006]——grep和正则表达式

    在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配, ...

  6. grep用法详解:grep与正则表达式【转】

    转自:http://blog.csdn.net/hellochenlian/article/details/34088179 grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配 ...

  7. linux初级学习笔记十:linux grep及正则表达式!(视频序号:04_4)

    本节学习的命令:grep 本节学习的技能: grep对文本的匹配 正则表达式的使用 知识点十:grep及正则表达式(4_4) grep,egrep,fgrep: grep: 根据模式搜索文本,并将符合 ...

  8. grep使用正则表达式搜索IP地址

    递归搜索当前目录及其子目录.子目录的子目录……所包含文件是否包含IP地址 grep -r "[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit: ...

  9. Linux文本处理三剑客之grep及正则表达式详解

    Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...

随机推荐

  1. 1088 Rational Arithmetic(20 分)

    For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...

  2. mysql日常使用总结(持续更新中)

    记录一些日常的mysql常用的使用, 方便随用随查. 一.表结构 1.1 查看表结构 方式1: 可以查看建表语句,完整的表结构. show create table table_name; 方式2:可 ...

  3. serv-U 7以上版本pasv端口的设置及中文乱码问题

    利用serv-u架设ftp服务器已经是再常见不过了事情了,近日一朋友为图新鲜,弄了个7.4版本的新玩意儿,结果架设上去后,仅开了21端口,用LeapFtp在port模式下连接没问题,但是另一常见的cu ...

  4. 打印流-PrintStream

    打印流-PrintStream java.io.PrintStream为其他输出流添加了功能,使其他的流能够更方便的打印各种数据值表现形式 PrintStream特点: 1.只负责数据的输入,不负责数 ...

  5. Spring Cloud Ribbon负载均衡

    目录 一.简介 二.客户端负载均衡 三.RestTemplate详解 GET请求 POST请求 PUT请求 DELETE请求 一.简介 ​ Spring Cloud Ribbon是一个基于HTTP 和 ...

  6. Visual Studio 使用

    目录结构 solution_dir Debug: 存放Debug版本信息的.exe Release: Release的.exe .sln: visual studio 项目文件 project_dir ...

  7. c/s和b/s的区别及实例说明【转】

    B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑 ...

  8. 程序运行的cpu时间

    time.clock() 测量CPU时间,比较精准,通过比较程序运行前后的CPU时间差,得出程序运行的CPU时间.

  9. BZOJ3693: 圆桌会议(Hall定理 线段树)

    题意 题目链接 Sol 好的又是神仙题... 我的思路:对于区间分两种情况讨论,一种是完全包含,另一种是部分包含.第一种情况非常好判断,至于计算对于一个区间[l, r]的$\sum a[i]$就可以了 ...

  10. Pylint 是什么

    Pylint 是什么 Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考 ...