首先介绍grep的一些常见用法:

grep:根据模式搜索文本,并将符合模式的文本行显示出来。

其基本格式为:grep [options] PATTERN [FILE...]

即:grep [选项] 匹配模式 [文件...];其中,中括号表示该选项可省略,...表示可以有多个。PATTERN:文本字符和正则表达式的元字符组合而成匹配条件。

下面介绍grep匹配模式中常用的几个选项。

grep -i :表示忽略字符的大小写;其基本用法为:grep -i PATTERN [FILE...];例如:匹配/etc/inittab文件中的字母a,并忽略其大小写。其代码如下:

  1. #grep -i 'a' /etc/inittab

其显示结果如下图,将会把所有匹配到的字符a,不管是小写还是大写都会先是出来,可以看到大写字母也出现,但匹配到没有,却看不出来。要想看到匹配效果,就需要借助下面这个选项了。

grep --color:表示匹配到的字符用其他颜色显示出来;其基本用法为:grep -color PATTERN [FILE...];例如:还用上一个文件,匹配/etc/inittab文件中的字母a,并用其他颜色显示出来。其代码如下:

  1. #grep --color 'a' /etc/inittab

其显示结果将会把匹配到的字符a,用其他颜色显示出来。如下图所示:

要想显示字符a,且不管是大写还是小写都显示出来,可在命令行输入如下代码:

  1. #grep -i --color 'a' /etc/inittab

其显示结果如下图所示,可以看到不管是大写还是小写都可以匹配到。

grep -v:表示显示没有被模式匹配到的行;其用法为:grep -v PATTERN [FILE...];例如:依然用前面那个文件,在文件/etc/inittab中,显示没有字符a的行;其代码如下:

  1. #grep -v 'a' /etc/inittab

其显示结果将会把所有不含字符a的行都显示出来。

grep -A n:表示显示匹配到的行及其后面n行;其基本用法为:grep -A n PATTERN [FILE...];例如:在文件/etc/passwd中,显示root用户的后4行,其代码如下:

  1. #grep -A 4 'root' /etc/passwd

其显示结果如下图:

可能有人会问,不是显示下面4行么,怎么多显示了几行,其实该命令只是显示匹配到root字符及其后面4行,要想只显示用户为root的后面4行,只需锚定词首即可,代码及结果如下:

  1. #grep -A 4 '^root' /etc/passwd

grep -B n:表示显示匹配到的行及其前面n行;其用法为:grep -B n PATTERN [FILE...]。例如:显示文件/etc/fstab中字符proc的钱4行。其代码如下:

  1. #grep -B 4 'proc' /etc/fstab

其显示结果为:

grep -C n:表示显示匹配到的行及其该行前后各n行;其用法为:grep -C n PATTERN [FILE...]。例如:显示文件/etc/fstab中字符boot前后各2行。其代码及显示结果如下:

  1. #grep -C 2 'boot' /etc/fstab

grep -E:表示使用扩展正则表达式,相当于egrep,其用法跟其他选项配合使用。具体用法不在阐述。

基本正则表达式和扩展正则表达式的异同:

先介绍基本正则表达式。基本正则表达式的元字符:

.:表示任意单个字符;

[]:表示匹配范围内的任意单个字符;

[^]:表示匹配指定范围外的任意单个字符

字符集和包括:[:digit:]:表示数字;[:lower:]:表示小写字母;[:upper:]:表示大写字母;[:punct:]:表示标点符号;[:space:]:表示空格;[:alpha:]:表示所有字母;[:alnum:]:表示所有字母和数字。

匹配次数(默认为贪婪模式,即尽可能长的匹配):

*:表示匹配其前面的字符任意次

例:给一串字符:a,b,ab,aab,acb,adb,amnb

如a*b,则匹配字符有:b,ab,aab

.*:表示匹配任意长度的任意字符

\?:表示匹配其前面的字符1次或0次

\{m,n\}:表示匹配其前面的字符至少m次,至多n次,如:

\{1,\}:表示匹配至少一次

\{0,3\}:表示匹配最多三次

位置锚定:

^:锚定行首,此字符后面的任意内容必须出现在行首,如刚刚提到的'^root',表示该字符必须出    现在行首;

$:锚定行尾,此字符前面的任意内容必须出现在行尾

^$:空白行

\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现

\>或\b:锚定词尾,其后边的任意字符必须作为单词尾部出现

如:\<root\>:在整个文件中,把root作为整个单词出现,词首词尾词中都不行,如:mroot、rooter、monrooter均将不匹配。

分组:\(\)

\(ab\)*:表示ab整体作为匹配字符,且匹配任意次

\(ab\)\{1,\}:表示ab整体作为匹配字符,且匹配至少一次

\(ab\):表示ab整体作为匹配字符

后向引用

\1:匹配第一个左括号以及与之对应的右括号所包括的所有内容

\2:匹配第二个左括号以及与之对应的右括号所包括的所有内容

\3:匹配第三个左括号以及与之对应的右括号所包括的所有内容

......

如:新建文件test1,其内容如下:

He love his lover.

She like her liker.

He love his liker.

She like her lover.

He like her.

She love he.

# grep '\(l..e\).*\1' test1:表示匹配前面l开头,e结尾中间为任意两个字符的组,且前后必须相同;

# grep 'l..e' test1:表示所有的都可以匹配

下面介绍扩展正则表达式。扩展正则表达式的元字符、位置锚定同基本正则表达式相同,不同之处在于次数匹配,且扩展正则表达式多了|符号。

次数匹配:

*:表示其前字符任意次

?:表示其前字符0次或1次

+:表示匹配其前面的字符至少1次

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

|:即or,例:

C|cat :表示匹配C或cat

(C|c)at:表示以大写或小写c开头的cat

#grep -E ‘C|cat’ test5

或者

#egrep ‘C|cat’ test5

egrep的用法除了在匹配次数上与grep不同外,其他基本相同,且grep -E [options] PATTERN [FILE...]  等同于egrep [options] PATTERN [FILE...] 。

下面给出一些练习题,各位可以做些练习题,加深一下这些命令的用法。各练习题后面都配有参考答案,希望各位能自己先做练习然后再对照答案,不要直接看答案,那样是没有多少效果的,同时也希望各位能多多上机,只有勤加练习才能记住各命令的用法。练习题中有些题目会设计到管道的用法,不会做的可以先看看管道的用法然后再做这些练习题。

练习一:

1、显示/proc/meminfo文件中以不区分大小的s开头的行;

# grep '^s' /proc/meminfo -i   或者

# grep '^[sS]' /proc/meminfo

2、显示/etc/passwd中以nologin结尾的行;

# grep 'nologin$' /etc/passwd

取出默认shell为/sbin/nologin的用户列表

# grep 'nologin' /etc/passwd | cut -d: -f1

取出默认shell为bash,且其用户ID号最小的用户的用户名

# grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1

3、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;

# grep '^#[[:space:]]\{1,\}[^[:space:]]' /etc/inittab

4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;

# grep ':[0-9]:' /etc/inittab

5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;

# grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf

6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;

# grep '\(^[0-9]\).*\1$' /etc/inittab

练习二:

1、找出某文件中的,1位数,或2位数;

# grep '\<[[:digit:]][[:digit:]]\?\>' /etc/inittab  或者

# grep '\<[0-9]\{1.2\}\>' /etc/inittab

2、找出ifconfig命令结果中的1-255之间的整数;

# ifconfig | egrep --color '\<[1-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>'

注:该命令显示结果可能会将非整数也显示出来,请各位注意,系统默认是不识别小数点的,所以它会把非整数拆分成两个整数来对待,这点还请注意。

3、查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd

# grep '^student:' /etc/passwd

若在找出该用户的ID号,则为:# grep '^student:' /etc/passwd | cut -d: -f3  或者# id -u student

转载于:https://blog.51cto.com/lq2419/1148355

grep和egrep的一些简单用法相关推荐

  1. grep、egrep、fgrep的用法与特性详解

    [转载自]http://tanxw.blog.51cto.com/4309543/1361993 开篇        学习Linux也有一段时间了,对Linux多少也算是有点了解了,越是了解也就越对这 ...

  2. linux全局搜索是什么,linux之文本搜索工具(grep、egrep)用法

    linux操作系统的一项重要的法则就是一切皆文件,然而对于初学者来说最头疼的一件事就是linux庞大文件系统的管理,对于一些文本文件的查找所搜等无从下手,特别是对于习惯于windows操作系统的大家来 ...

  3. 文本查找查找命令的grep 、egrep、fgrep用法的详解

    文本查找查找命令的grep .egrep.fgrep用法的详解 一.学习目标 了解并能熟悉运用grep.egrep.fgrep命令. 二.学习内容 1.grep.egrep.fgrep命令的意思和用法 ...

  4. 关于grep,egrep正则表达式的常用用法

    正则表达式是一类字符所书写的模式(pattern) 元字符:不表示字符本身的意义,而用于额外功能性的描述:而如果在这些特定的字符前加/这个符号那么这些字符就表示原有的意思. 正则表达式:基本正则表达式 ...

  5. 编程语言和shell编程的基础内容以及grep、egrep命令及相应的正则表达式和用法...

    bash的特性之多命令执行的逻辑关系: 1.命令替换 COMMAND1 $(COMMAND2) 2.管道 COMMAND1 | COMMAND2 | COMMAND3 ... 3.顺序执行结构 COM ...

  6. 文本处理工具grep、egrep的具体用法

    一.grep.egrep含义 grep:(global search regular expression(RE)and print out the line):文本搜索工具,根据用户指定的文本模式( ...

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

    目录 1.grep简介 1.1.grep是什么 grep (Global search REgular expression and Print out the line) 作用:文本搜索工具,根据用 ...

  8. linux中egrep的用法,liunx中grep,egrep及相应的正则表达式和用法

    正则表达式是linux中重要的一部分,学习正则表达式先要学好grep和egrep的命令使用. 1. grep: grep命令的基本语法格式 grep [OPTION]... 'PATTERN' FIL ...

  9. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

最新文章

  1. TinyML 机器学习简介
  2. 如何在ubuntu上搭建hustoj?
  3. Visual Studio 2008 集成SP1补丁
  4. c语言贪婪遗传算法算法背包问题,求高手帮我用C语言写一个运用贪心和遗传算法求解背包问题的程序。。。。谢谢!!!!!!十分紧急!!!...
  5. paip.提升用户体验---c++ QLabel标签以及QLineEdit文本框控件透明 设置
  6. linux三剑客之sed命令,linux三剑客之sed命令
  7. gis怎么提取水系_arcgis水系提取流程(dem)
  8. python对串口助手传入的16进制字符数据进行绘图
  9. kibana6.0版本汉化工具
  10. Lua的自我学习之路-语法学习9
  11. Xilinx FPGA高速串行收发器简介
  12. stylecloud ,wordcloud 库学习及使用例子
  13. python学习-reshape()函数理解
  14. 解决Linux 系统,出现不在sudoers 文件中,此事将被报告的问题
  15. 做分销系统应该做小程序还是app?
  16. 机器学习:参数模型、非参数模型
  17. Uboot中lpddr4的初始化(i.MX8M)
  18. 路由协议OSPF和ISIS区别
  19. Kong(k8s)部署及使用
  20. Cheeses and bread

热门文章

  1. 常用的LINQ to SQL 用法
  2. tcp有限状态机分析
  3. Smark.Data 1.5更新详解
  4. 设计模式-Factory Method Pattern
  5. Hadoop3.0 WordCount测试一直Accept 状态,Nodes of the cluster 页面node列表个数为0
  6. OC如何跳到系统设置里的各种设置界面
  7. VMWare 安装 Linux
  8. 20145313张雪纯《信息安全系统设计基础》第11周学习总结
  9. 自定义控件复选框和单选框的实现
  10. SQL进阶提升(疑惑篇order by)-学习sql server2005 step by step(十一)