grep、egrep 详解

grep、egrep搜索工具

你知道怎样在文本中检索出自己需要的数据吗?

对,grep,egrep命令可以做到的不仅仅是这些,让我来介绍一下吧。

grep、egrep是什么?

grep、egrep都是文本搜索工具

grep、egrep能做什么

1)根据用户指定的”pattern(过滤条件)“对目标文本逐行进行匹配检查;

2)打印出符合条件的行。

你肯定在想grep,egrep是什么关系?

egrep是支持使用扩展正则表达式的grep命令。相当于grep -E

grep命令用法介绍:

grep  [OPTIONS](注:选项)  PATTERN(注:过滤条件)  [FILE...](检索的文本文件)

选项1: 

--color=auto: 对匹配到的文本着色后高亮显示
-i 忽略字符大小写;
-o 仅显示匹配到的文本自身;
-v  --invert-match:反向匹配;
-E 支持扩展的正则表达式;
-q, --quiet, --silient 静默模式,不输出任何信息;


基本正则表达式的原字符介绍注:我们的过滤条件是由文本字符及正则表达式元字符所编写的。)

1.字符匹配类:

  • .:匹配任意单个字符;
  • [ ]:匹配范围内的任意单个字符;
  • [^ ]:匹配范围外的任意单个字符;
  • 字符集 [:digit:] 所有数字 ,[:lower:]所有小写字母, [:upper:]所有大写字母, [:alpha:]所有字母, [:alnum:]所有的字母和数字,[:space:]所有空白字符, [:blank:]空白, [:punct:]所有标点符号

2.匹配次数类:

用在要指定其出现的次数的字符后面,用限制其前面的字符要出现的次数;默认工作于贪婪模式。

  • *:匹配前面的字符任意次(0,1或多次);

例如:grep "x*y" a2  注:只要含有y的都可以匹配到

  • .*:任意长度的任意字符;

例如:grep “^x.*y” a2 注:.*表示以x开头中间跟上任意字符并含有y的字符将被匹配。

  • \+:匹配前面的字符至少1次;

例如:grep “^[[:space:]]\+[[:space:]]” /etc/grub2.cfg 注:\+匹配行首的空白行出现1次及以上

  • \?:匹配前面的0次或1次,即前面的字符可有可无;

例如:grep "x\?y"  注:只要是含有y的都可以匹配到

  • \{m\}:其前面的字符出现m次,m为非负整数;

    例如: grep "x\{2\}y"  注:\{2\}匹配x要出现两次。 只有xxxyabc符合

  • \{m,n\}:匹配前面的字符至少m次至多n次

例如:grep "\<[0-9]\{2\3}\>" /etc/passwd  注:匹配文件中至少2位至多3位的数字。

  • \<:牟定词首  \>:牟定词尾,用来限定匹配完整单词的。
  • \{0,n\}:至多n次;
  • \{m,\}:至少m次;

3.位置锚定类:

限制使用模式搜索文本,限制模式所匹配到的文本只能出现于目标文本的哪个位置;

  • ^:行首锚定;用于模式的最左侧,           例如:grep “^s” a1  注:s开头的行
  • $:行尾锚定;用于模式的最右侧,PATTERN$   例如:grep “s$”a1   注:s结尾的行

^PATTERN$:要让PATTERN完全匹配一整行;    例如: grep “^xy$”a2  注:只有xy的行

  • ^$:空行;  例如:grep “^$” a2   注:找出a2中的空行
  • ^[[:space:]]*$:空行或者包含空白字符的行   例如:grep "^[[:space:]]*$" a2
  • \<或\b:词首锚定,用于单词模式的左侧,格式为\<PATTERN, \bPATTERN
  • \>或\b:词尾锚定,用于单词模式的右侧,格式为PATTERN\>, PATTERN\b
  • \<PATTERN\>:单词锚定;单词:由非特殊字符组成的连续字符(字符串)都称为单词;

4.分组与引用类:

  • \(PATTERN\):将此PATTERN匹配到的字符当作一个不可侵害整体进行处理;
  • Note:分组括号中的模式匹配到的字符会被正则表达式引擎自动记录于内部的变量中,这些变量是\1, \2, \3, ...

\(pat2\)pat3\(pat4\(pat5\)pat6\)

注:\1是\(pat2)模式匹配的结果的引用。  \2是\(pat4\(pat5\)的引用

  • \n:模式中第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符串;(不是模式,而是模式匹配的结果)
  • \1:第一组括号中的pattern匹配到的字符串;
  • \2:第二组括号中的pattern匹配到的字符串

egerp介绍

   egrep [OPTIONS] PATTERN [FILE...]

选项2

-E, --extended-regexp:支持使用扩展正则表达式

-F, --fixed-strings:支持使用固定字符串,不支持正则表达式,相当于fgrep;

-G, --basic-regexp:支持使用基本正则表达式;

-P, --perl-regexp:支持使用pcre正则表达式;

-e PATTERN, --regexp=PATTERN:多模式机制;

-f FILE, --file=FILE:FILE为每行包含了一个pattern的文本文件,即grep script;

-A NUM, --after-context=NUM

-B NUM, --before-context=NUM

-C NUM, -NUM, --context=NUM

egrep的正则元字符介绍

总结: 相同点:在字符匹配类和锚定类是一样的。

不同点: 匹配次数类和分组引用类,各字符的控制语意一样,写法上扩展上少写了\。分组引用引出了或的机制

匹配次数:

  • *:任意次;
  • ?:0次或1次;
  • +:1次或多次;
  • {m}:匹配m次;
  • {m,n}:至少m次,至多n次;
  • {0,n}:至多n次
  • {m,}:至少m次

分组及引用:

  • (pattern):分组,括号中的模式匹配到的字符会被记录于正则表达式引擎内部的变量中;

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

例如:或者:a|b:a或者b   C|cat:表示C或cat  (C|c)at:表示Cat或cat

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

练习提升

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

~]# egrep -v "bash$" /etc/passwd

2、找出/etc/passwd文件中的三位或四位数;

~]# egrep "\<[0-9]{3,4}\>" /etc/passwd

3、找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行;

grep  -E "^[[:space:]]+[[:space:]]" /etc/grub.cfg

4、找出"netstat  -tan”命令的结果中,以‘LISTEN’后跟0或多个空白字符结尾的行;

netstat -tan | grep -E "LISTEN[[:space:]]*$"

5、找出"fdisk  -l“命令的结果中,包含以/dev/后跟sd或hd及一个小字母的行;

fdisk -l | egrep "/dev/(sd|hd)[[:lower:]]"

6、找出”ldd  /usr/bin/cat“命令的结果中文件路径;

ldd /usr/bin/cat | grep -E "[/]+.*"

7、找出/proc/meminfo文件中,所有以大写或小写s开头的行;至少用三种方式实现;

~]# egrep "^(s|S)" /tmp/meminfo

~]# grep "^[sS]" /tmp/meminfo

~]# grep -i "^s" /tmp/meminfo

8、显示当前系统上root、centos或slackware用户的相关信息;

~]# egrep "^(root|centos|slackware)\>" /etc/passwd

9、echo输出一个绝对路径,使用egrep取出其基名;

~]# echo /etc/passwd/ | egrep -o "[^/]+/?$"

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

~]# ifconfig | egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

11、添加用户bash、testbash、basher及nologin,要求前三个用户的默认shell为/bin/bash,nologin的默认shell为/sbin/nologin,而后找出其用户名与shell名相同的用户;

~]# egrep "^([[a-z0-9]+)\>.*\1$" /etc/passwd

时间: 2024-10-27 01:34:07

grep、egrep 详解的相关文章

grep命令详解

grep命令是linux下的行过滤工具,其参数繁多,下面就一一介绍个个参数的作用,希望对大家有所帮助.grep -- print lines matching a pattern (将符合样式的该行列出)◎语法: grep [options] PATTERN [FILE...] grep用以在file内文中比对相对应的部分,或是当没有指定档案时, 由标准输入中去比对. 在预设的情况下,grep会将符合样式的那一行列出.此外,还有两个程序是grep的变化型,egrep及fgrep. 其中egrep

linux grep命令详解

linux grep命令详解 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. Unix的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟gr

grep正则表达式详解及练习

grep正则表达式详解及练习 一.在学习grep正则表达式前,先了解下linux著名的文本处理三剑客: (1)grep.egrep.fgrep 文本搜索工具. (2)sed     文本编辑工具,一种流编辑器,行编辑工具. (3)awk 强大的文本分析工具,文本格式化工具,文本报告生成器. 以上三大命令均支持正则表达式,本文以grep正则表达式为例展开学习. 1.什么是正则表达式? 正则表达式(Regular Expression):由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意

grep用法详解 grep与正则表达式

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 主要参数    [options]主要参数:    -c:只输出匹配行的计数.    -I:不区分大 小写(只适用于单字符).    -h:查询多文件时不显示文件名.    -l:查询多文件时只输出包含匹配字符的文件名.    -n:显示匹配行及 行号.    -s

文本处理工具之一grep命令详解

grep(Globel Search Regular Expression and Printing out the line)全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. egrep表示扩展的grep,相比grep支持更多的元字符,"grep -E"相当于egrep.fgrep是fast grep,不支持元字符,但是搜索速度更快.

awk.sed.grep三剑客详解

事前准备1.主机node1:172.16.133.112.作为实验的文件/etc/passwd /etc/fstab qinqin cp /etc/passwd . cp /etc/fstab . 一.grep用法详解1.grep是干什么的grep的全名是Galobal research Regular Expression and Pringtiong,即搜索正则表达式,也就是说grep简单来讲就是用来搜索匹配字符的2.grep分类grep有基本正则表达式和扩展正则表达式之分,不过她们的作用域

grep 命令详解及相关事例

一.匹配字符 .    匹配任意单个字符 [ ]  匹配指定范围内的任意字符 [^]  匹配飞指定范围内的任意字符 [:alpha:] 字母字符 [:lower:] 小写字母字符 [:upper:] 大写字母字符 [:digit:] 数字 [:alnum:] 字母数字字符 [:space:] 空白字符(禁止打印),如回车符.换行符.竖直制表符和换页符 [:punct:] 标点字符 [:cntrl:] 控制字符(禁止打印) [:print:] 可打印字符 使用时一般使用两个中括号,具体会在下面的例

linux系统 I/O重定向、管道及grep用法详解

输入/输出设备(INPUT OUTPUT) 系统设定 默认输出设备:标准输出 STDOUT 1 默认输入设备:标准输入 STDIN 0 标准错误输出:STDERR 2 默认标准输入:键盘 默认标准输出和错误输出:显示器 linux I/O重定向 >:覆盖输出 >>:追加输出 set -C:禁止对已经存在的文件使用覆盖重定向 强制覆盖输出:则使用>| set +C:关闭上述功能 2>:重定向错误输出 2>>:追加方式错误输出 &>:重定向标准输出和错误

linux文本处理三剑客之grep命令详解

Linux文本处理三剑客之grep grep:文本过滤(模式:pattern)工具 grep, egrep, fgrep(不支持正则表达式搜索) sed:stream editor,文本编辑工具 awk:Linux上的实现gawk,文本报告生成器 grep grep: Global search REgularexpression and Print out the line 作用:文本搜索工具,根据用户指定的"模式"对目标文本逐行进行匹配检查:打印匹配到的行 模式:由正则表达式字符及