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)
ladsdmladsdm
上一篇 2016-08-12 14:45
下一篇 2016-08-12 14:45

相关推荐

  • Linux基本命令

    前言 今天学习了Linux下的一些基本命令,在此归纳总结一下这些命令的基本用法。 Linux命令帮助的获取     在拿到一个命令后不知道其用法,我们可以通过命令帮助来查看它的用法,但linux下内部命令和外部命令获取帮助的方法是有差别的。     内部命令:help command &n…

    Linux干货 2016-10-14
  • 配置路由实例

    路由的分类和管理 路由:跨网络通信; 路由分类:     主机路由     网络路由     默认路由 路由管理命令: route 命令是在本地 IP 路由表中显示和修改条目网络命令; 查看:route -n 添加:route add ro…

    Linux干货 2016-09-12
  • 第一周的作业

    1、描述计算机的组成及其功能。 主要分为五个部分: 控制器:计算机的中枢神经,控制总线使用权限、寻址、管理各类资源的分配。 运算器:对数据进行各种算数运算和逻辑运算。 存储器:通常指内存RAM,CPU需要运行的程序以及数据都存放在存储器中供CPU调用处理。 (以上三者为计算机核心的三大部件,依靠这三大部件即可完成核心工作。) 输入设备:比如鼠标、键盘,使用户…

    Linux干货 2016-11-02
  • 马哥教育21期网络班—第15周课程+练习—-awk 总结

    GNU awk: 文本处理三工具:grep, sed, awkgrep, egrep, fgrep:文本过滤工具;pattern sed: 行编辑器 模式空间、保持空间 awk:报告生成器,格式化文本输出; AWK: Aho, Weinberger, Kernighan&nbsp…

    Linux干货 2016-11-14
  • tar、rpm和yum总结

    tar、rpm和yum总结 tar工具 tar是Tape ARchive的缩写,原意是磁带归档,进行数据备份。在linux中,用tar命令,可以把一大堆的文件和目录全部打包成一个文件,方便网络传输和备份数据。 tar不仅可以打包多个文件和目录,还可以对打包完的数据包进行压缩,进一步提升传输和备份质量。 选项 -c:设置新的备份文件-t:列出备份文件的内容 -…

    Linux干货 2017-08-04
  • 文本处理工具补充之sed命令

    sed:stream editor,行编辑器         sed命令工作原理:它在处理数据时,每次只处理一行,首先把当前处理的行存储在临时缓冲区中,我们称这个缓冲区称为“”模式空间“,接着用sed命令处理缓冲区中的内容,处理完后,把缓冲区中的内容送到屏幕上显示出来,接着去处理…

    Linux干货 2016-08-11