Linux三剑客之grep

grep(Globel Search Regular Expression and Printing out the line)全面搜索正则表达式并把行打印出来)是一个强大的文本搜索工具,使用正则表达式搜索文本的文本,并把结果打印出来。Unix家族包括grep、egrep和fgrep。egrep是扩张的正则表达式它支持更多的字符,fgrep是fast grep它不支持元字符搜索,但搜索速度更快。grep搜索结果不影响原文件。


grep命令

全面搜索正则表达式并把行打印出来

常用语法grep [OPTIONS] PATTERN [FILE…]

命令  选项    模式   文件

PATTERN 模式 是由正则表达式的元字符和普通字符所指定的过滤条件。

常用选项

-A NUM, –after-context=NUM#显示匹配行的后NUM行

-B NUM, –before-context=NUM#显示匹配行的前NUM行

-C NUM, -NUM, –context=NUM#显示匹配行的前后NUM行

-E, –extended-regexp#扩张的正则表达式-n, 

–line-number#显示匹配的行号

-q, –quiet, –silent#静默模式,不做任何输出

-o, –only-matching #只显示匹配到的行

–color[=WHEN], –colour[=WHEN]#匹配高亮显示,cent6.#默认没启用

-c, –count #统计匹配的行数-i, 

–ignore-case #忽略大小写

-v, –invert-match#显示不能够被pattern到的行 (取反)

-w, –word-regexp#单词匹配而不是字符


在使用grep前先了解了解正则表达式。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式的元字符可以做

字符匹配   匹配次数 位置锚定 分组

正则表达式使用的是贪婪模式,能匹配多长就尽量匹配多长

grep不加引号直接过滤字符串;grep在进行模式匹配的时候必须加引号,单引和双引号都可以;grep在引用变量的时候必须加双引号

如果要匹配特殊字符的话要使用\转义来匹配特殊字符  如\$ \@等

字符匹配

. 匹配任意单个字符

[]匹配括号能指定的字符

[^]匹配括号外的指定字符

[alpha]:匹配所有字符

[:alnum:] 除了换行符外的所有字符

[:punct:] 所有标点符号

[:space:] 空格和tab

[:digit:] [0-9] 匹配所有数字

[:lowwer:][a-z] 匹配所有小写字符

[:upper:] [A-Z] 匹配所有的大写字符

匹配次数

* 匹配前面字符0次、1次或多次

.* 匹配任意长度任意字符

\? 匹配前面字符0次或1次

\+ 匹配前面字符至少一次或以上多次

\{m\} 匹配前面字符m次

\m,n\} 匹配前面字符最少m次,最多n次

\{,n\} 匹配前面字符做多n次\

{m,\} 匹配前面字符最少m次

位置锚定

^ 行首锚定,用于模式的最左侧

$ 行尾锚定,用于模式的最右侧

^PATTERN$ 用于模式匹配整行

^$ 空行

^[[:space:]]*$ 空白行

\< 或\b:词首锚定,用于单词模式的左侧

\> 或\b:词尾锚定;用于单词模式的右侧\<PATTERN\>:匹配整个单词

分组\(PATTERN\) 将一个或多个字符捆绑在一起,当作一个整体进行处理。引用第一个小括号的分组\1,第二个是\2,以此类推。

示例

test1.png

test 2.png

1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)

 grep -i '^s' /proc/meminfo grep  '^[sS] /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行

 grep -v '/bin/bash$' /etc/passwd

3、显示用户rpc默认的shell程序

 grep '\<rpc\>' /etc/passwd|cut -d: -f7

4、找出/etc/passwd中的两位或三位数

   grep '\<[1-9][0-9]\{1,2\}\>' /etc/passwd

5、显示/etc/grub.conf文件中,至少以一个空白字符开头的且后面存非空白字符的行

 grep '^[[:space:]]\+[^[:space:]]' /etc/grub.conf

6、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行

 netstat -tan|grep '\<LISTEN[[:space:]]*'

7、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名的行

 grep '^\(.*\)\>.*\1$' /etc/passwd


egrep是扩展的正则表达式

即grep -E

常用语法grep [OPTIONS] PATTERN [FILE…]

命令  选项    模式   文件

egrep常用选项和字符匹配基本和grep就不多做解释了

次数匹配:

*:匹配前面字符任意次

?: 0或1次

+:1次或多次

{m}:匹配m次

{m,n}:至少m,至多n次

位置锚定:

^ :行首锚定,用于行的最左侧

$ :行尾锚定,用于行的左右侧

\<, \b :词首锚定。

\>, \b :词尾锚定

分组:

(pattern)  将一个或多个字符捆绑在一起,当作一个整体进行处理。引用第一个小括号的分组\1,第二个是\2,以此类推。

后向引用:\1, \2, …

或者:

a|b :a或b

C|cat: C或cat

(C|c)at:Cat或cat


示例

 1、显示当前系统root、mage或wang用户的UID和默认shell

   egrep '^root\>|^mage\>|^wang\>' /etc/passwd|cut -d: -f3,7

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

   egrep '[[:alnum:]_]\(\)' /etc/rc.d/init.d/functions

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

   echo "/etc/rc.d/init.d/functions " |egrep -o '(.*/)+(.*)\1'

   

4、使用egrep取出上面路径的目录名

   echo "/etc/rc.d/inittab/functions" |grep '[^/]\+/\?$'

5、统计以root身份登录的每个远程主机IP地址的登录次数

   last |egrep –color=auto  '^root\>.*(.*\.){3}[0-9]{3}\> '

|tr -s ' '|cut -d' ' -f3|sort |uniq -c

6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

     

egrep '\<[0-9]\>' :0-9

egrep '\<[1-9][0-9]\>' :10-99

egrep \<1[0-9]{2}\>:100-199

egrep \<2[0-4][0-9]\> :200-249

egrep \<25[0-5]\>:250-255

7、显示ifconfig命令结果中所有IPv4地址

egrep '((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)\.){3}(2[0-4][0-9]|25[0-4]|[01]?[0-9][0-9]?)'

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

(0)
上一篇 2016-08-12 14:45
下一篇 2016-08-12 14:45

相关推荐

  • grep,find等相关命令

    Q1:显示当前系统上root、fedora或user1用户的默认shell; ~]# grep -E "^root|^fedora|^user1" /etc/passwd | awk -F: '{print $1,$NF}' ro…

    Linux干货 2016-11-27
  • 马哥教育首届IT技术博客大赛–结果揭晓

    号外、号外!!马哥教育首届博客大赛已圆满结束。感谢小伙伴们的积极参与! 噼里啪啦,小伙伴们掌声响起来,啤酒烤鸭high起来~~咳咳,跑题了,小编好像忘了一件很重要的事: 马帮博客大赛就是与众不同,全银河系也就仅此一家,为啥这么说呢,您看啊,咱就喜欢原创,鼓励原创,酷爱原创,以原创博客作为技术交流的平台供大家随意围观和吐槽,您看看,除了马哥这里,哪里还有这么自…

    Linux干货 2016-06-22
  • HAProxy初探及简单案例_Net21_第二周

    前言 随着互联网业务的迅猛发展,大型电商平台和门户网站对系统的可用性和可靠性的要求越来越高,高可用集群、负载均衡集群成为一种热门的系统架构解决方案。在众多的负载均衡解决方案中,有基于硬件的负载均衡设备,例如F5、Big-IP等,也有基于软件的负载均衡产品,如LVS、Nginx以及本文介绍的HAProxy等。在软件的负载均衡产品中,又分为两种实现方式,分别是基…

    Linux干货 2016-07-22
  • N22-妙手-第三周博客作业

    1、列出当前系统上所有已经登录的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | uniq -c     &nb…

    Linux干货 2016-09-19
  • 文本处理工具grep

    正则表达式:Regular Expression REGEXP         由一类特殊字符及文本字符所编写的模式,表示控制或通配的功能 两类:     基本正则表达式BRE:     扩展正则表达式ERE: *** grep    GLoble searc…

    Linux干货 2016-08-04
  • 用户权限及正则表达式

    ln –s软连接原文件可以写绝对路径或相对于软连接文件的相对路径 ln 硬链接的原文件可以写绝对路径,相对于硬链接文件的相对路径或相对于当前路径的路径(因为硬链接主要是看节点号) etc/passwd格式: username:x:uid:gid:home:shell etc/shadow格式 username:password:password age:mi…

    Linux干货 2016-08-08