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. BestCoder Round #86 1001

    链接http://acm.hdu.edu.cn/showproblem.php?pid=5804 题意:给你一些商店和他的商品价格,然后给你一个记账本,问你记大了就是1,否则是0 解法:模拟,注意测试 ...

  2. Linux--1 初识

    一.服务器核心知识 1.电脑和电脑的硬件组成 现在的人们几乎无时无刻不在使用着电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑,还是智慧型手机等等,这些东西都算是电脑.虽然接触这么多,但是 ...

  3. 禁用thinkpad触摸板的方法

    控制面板----硬件和声音----设备和打印机----鼠标----ThinkPad------开启触摸板(前面的勾勾去掉)

  4. HDU 5775 L - Bubble Sort 树状数组

    给定一段冒泡排序的代码,要求输出每个数字能到达的最右边的位置和最左边的位置的差 因为那段冒泡排序的代码是每次选取一个最小的数,放在左边的,所以,每个数最多能到达右边的位置应该是起始位置i+右边有多少个 ...

  5. No lease on /目录: File does not exist. [Lease. Holder: DFSClient_NONMAPREDUCE_-2059237550_1, pendingcreates: 8]错误及解决方法

    感觉程序员的世界真是一个变幻无常且精彩绝伦的世界,每次跑程序都会发现不一样的问题.今天跑MapReduce程序来统计邮箱次数时遇到了一个问题,明明一样的代码,别人能跑,我却跑不了.我相信,基本做这行的 ...

  6. 判断两个IP地址是不是属于同一子网的方法

    一个IP地址有三种写法: 第一种,单个IP,如192.168.55.28 第二种,IP/子网掩码,如192.168.55.28/255.255.255.0 第三种,IP/子网掩码长度,如192.168 ...

  7. pygame 使用

    模块概况 display image event key mouse font 类概况 Rect: 返回的矩阵区域(图片) Surface: 可以看做是一个贴图, 它就是来显示的 display(与显 ...

  8. orcale开篇

    1.数据库系统和数据库的管理系统  数据库系统=数据库的管理系统+oper操作员+硬件2.Oracle的版本  8i/ 9i 10g/11g  12c(cloud)3.实例和数据库的关系  实例:数据 ...

  9. 《C#高效编程》读书笔记10-使用可选参数减少方法重载数量

    C#现在支持调用者一方使用具名参数(named parameter).类型中的名称也成为了公有接口的一部分.修改公有参数名称将有可能破坏掉调用者的代码. public void SetName(str ...

  10. Ubuntu上安装Samba服务器实现家庭共享

    如何在Ubuntu上安装Samba服务器 大多数Linux发行版都包含Samba. 要在Ubuntu上安装Samba,只需运行: sudo apt install samba 要检查您的Samba版本 ...