grep和egrep正则表达式

Linux上文本处理三剑客

  • grep :文本过滤( 模式:pattern) 工具;
  • grep, egrep, fgrep (不支持正则表达式搜索,但搜索纯文本的数据最快)
  • sed :stream editor ,文本编辑工具;
  • awk :Linux上实际是gawk(GUN awk) ,文本报告生成器;

正则表达式:

  • 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
  • 支持正则表达式的程序:grep, vim, less,nginx等

正则表达式分两类:

  • 基本正则表达式:BRE
grep ,egrep -G 
  • 扩展正则表达式:ERE
grep -E, egrep 

正则表达式引擎:

  • 采用不同算法,检查处理正则表达式的软件模块
  • PCRE(Perl Compatible Regular Expressions)
  • 元字符分类:字符匹配、匹配次数、位置锚定、分组

grep
  grep: Global search REgular expression and Print out the line.

  • 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
  • 模式:由正则表达式字符及文本字符所编写的过滤条件

  

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
  • --color=auto: 对匹配到的文本着色显示;
  • -v: 显示不能够被pattern匹配到的行;
  • -i: 忽略字符大小写
  • -n:显示匹配的行号
  • -c: 统计匹配的行数,而不显示匹配到的内容
  • -o: 仅显示匹配到的字符串;
  • -q: 静默模式,不输出任何信息
  • -A #:after,显示匹配的行及其后#行
  • -B #: before,显示匹配的行及其前#行
  • -C #:context,显示匹配的行及其前后各#行
  • -e:实现多个选项间的逻辑or关系
    grep –e ‘cat‘ -e ‘dog‘ file
  • -E:使用ERE

   扩展的正则表达式

基本正则表达式元字符:
 字符匹配:

  • .: 匹配任意单个字符;
  • []: 匹配指定范围内的任意单个字符
  • [^]:匹配指定范围外的任意单个字符
  • [:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]

 

 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式:尽可能长的匹配

  • * :匹配前面的字符任意次,包括0次
  • .* :任意长度的任意字符
  • \? :匹配其前面的字符0或1次
  • \+ :匹配其前面的字符至少1次,但不需要紧随在第一次后面
  • \{m\} :匹配前面的字符m次
  • \{m,n\} :匹配前面的字符至少m次,至多n次
  • \{,n\} :匹配前面的字符至多n次
  • <=n次
  • \{m,\} :匹配前面的字符至少m次
  • >=m次

 

 位置锚定:定位出现的位置

  • ^ :行首锚定,用于模式的最左侧
  • $ :行尾锚定,用于模式的最右侧
  • ^PATTERN$: 用于模式匹配整行
  • ^$: 空行
  • ^[[:space:]]*$ :空白行或包含tab字符的行
  • \< 或 \b :词首锚定,用于单词模式的左侧
  • \> 或 \b :词尾锚定;用于单词模式的右侧
  • 注意:在grep中,字母和数字的组合也被视为单词
  • \<PATTERN\>:锚定以PATTERN表达式做为单词的行

 

 分组及引用

  • \(\):将1个或多个字符捆绑在一起作为一个整体进行处理
  • \(xy\)*ab:xy作为一个整体出现0此或多次

   注意:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部变量中,这些变量为:
    \1:模式从左侧起,第一个左括号以及与其匹配的右括号之间的内容
    \2:模式从左侧起,第二个左括号以及与其匹配的右括号之间的内容
    \3:
    ……
    后向引用:引用前面的分组括号中的模式所匹配的字符,且引用中的数据和分组模式匹配到的数据是一样

练习:

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

# grep -v "/bin/bash$" /etc/passwd

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

# grep "^rpc\>" /etc/passwd | cut -d: -f7

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

# grep -E "\<[0-9]{2,3}\>" /etc/passwd

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

# netstat -tan | grep "\<LISTEN[[:space:]]*$"

egrep及扩展的正则表达式

egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
  选项:

    -i,-o,-v,q,-A,-B,-C
    -G:支持基本的正则表达式

扩展正则表达式元字符:

字符匹配:

  • .: 匹配任意单个字符;
  • []: 匹配指定范围内的任意单个字符
  • [^]:匹配指定范围外的任意单个字符
  • [:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式,尽可能长的匹配

  • * :匹配前面的字符任意次,包括0次
  • .* :任意长度的任意字符
  • ? :匹配其前面的字符0或1次
  • + :匹配其前面的字符至少1次
  • {m} :匹配前面的字符m次
  • {m,n} :匹配前面的字符至少m次,至多n次
  • {,n} :匹配前面的字符至多n次
  • <=n次
  • {m,} :匹配前面的字符至少m次
  • >=m次

位置锚定:定位出现的位置

  • ^ :行首锚定
  • $ :行尾锚定
  • ^PATTERN$: 用于模式匹配整行
  • ^$: 空行
  • ^[[:space:]]*$ :空白行或包含tab字符的行
  • \< 或 \b :词首锚定
  • \> 或 \b :词尾锚定

注意:在grep中,字母和数字的组合也被视为单词

  • \<PATTERN\>:锚定以PATTERN表达式做为单词的行

分组及引用

  • ():括号内模式会被记录于正则表达式引擎中:
  • 后向引用:\1,\2,\3......

或者

  • a|b:a或者b

  eg:C|cat :表示C或者cat
    (C|c)at :表示Cat或者cat

练习:1 、显示当前系统上,root,gao和user1用户的相关信息

# grep -E "\<(root|gao|uer1)\>" /etc/passwd

2 、统计以root 身份登录的每个远程主机IP

# who | grep -E "^root\>" | wc -l

3 、使用egrep 取出/etc/rc.d/init.d/functions

# echo "/etc/rc.d/init.d/functions" | grep -oE "[^/]+/?$"

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

时间: 2024-08-03 20:52:39

grep和egrep正则表达式的相关文章

Linux中grep、egrep正则表达式的使用

正则表达式的由来 正则表达式,英文写法Regular Expression,在编程语言中常被简写为regex.regexp等.它是用来描述.匹配一系列符合某个句法规则字符串的单个字符串. 正则表达式通常被用来检索.替换那些符合某个模式(Pattern)的文本. 1950年代,UNIX之父Ken Thompson将正则表达式引入编辑器QED,然后是编辑器ed,最终引入到grep中.从此,正则表达式被广泛地应用到了各种UNIX或类UNIX系统的工具之中,例如perl. 近些年来,主流操作系统.主流开

Linux中grep,egrep正则表达式基本用法

正则表达式 本人第一次写博文.由于最近刚好学到了正则表达式基本使用方法.整理了一下,以后用于回顾查找. 正则表达式基本说明: 基本来说,正则表达式式一种用来描述一定数量文本的模式,正则表达式的简写为REGEX 全称Regular Express. 首先正则表达式对于Linux运维工程师来说非常重要,这将伴随每一个运维工程师的职业生涯.说到正则表达式那么不得不说一下grep和egrep,grep全称是Globally search for a Regular Expression and prin

grep与egrep正则表达式

表达式 含义 c 任何与自己匹配的非特殊字符c \c 去掉字符c的任何特殊意义 ^ 行首 $ 行尾 . 任意单个字符 [...] ...字符中的任一字符,像a-z这样的区间是合法的 [^...] 不在...中的任意单个字符 \n 第n个\(...\)所匹配的字符(仅于grep中) r* r出现零或多次 r+ r出现一或多次(仅于egrep中) r? r出现零或一次(仅于egrep中) r1r2 r2紧随r1 r1|r2 r1或r2(仅于egrep中) \(r\) 带标记的正则表达式r(仅于gre

grep,egrep正则表达式

正则表达式是指由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是变速控制或通配的功能. Grep 正则表达式分两类: 基本正则表达式和扩展正则表达式 语法格式:grep [OPTION]-.'PATTERN' FILE-. 基本正则表达式分为: 字符匹配和匹配次数.位置锁定.分组.grep选项 1.字符匹配指令字符集: .:匹配任意单个字符 []:匹配指定集合中的任意字符 [[:alnum:]]:[0-9a-zA-Z]代表匹配数字和大小写字符 [[:alpha:]]:[a-zA-Z]代

Linux正则表达式grep与egrep

Linux正则表达式grep与egrep 正则表达式:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容.其实正则表达式,只是一种思想,一种表示方法.只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串.常用的工具有grep, sed, awk,这三个都是针对文本的行才操作的. grep  过滤器语法: grep  [-cinvABC]  'word'  filenam

Linux三剑客之grep 与 egrep

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

文件搜索工具之grep、egrep

定义: grep :Global search Regular Expression and Print out the line. egrep :Extend Global search Regular Expression and Print out the line. fgrep :Fast Global search Regular Expression and Print out the line. 注:fgrep不解析任何正则表达式,不常使用. 格式:grep/egrep  [OPT

文本处理(grep,vim),正则表达式

文件查看: cat [OPTION]... [FILE]...-E:显示行结束符$-n:对显示出的每一行进行编号-A:显示所有控制符-b:非空行编号-s:压缩连续的空行成一行 tac :内容倒过来显示 rev :每行倒过来显示 more:分页查看文件more [OPTIONS...] FILE...-d: 显示翻页及退出提示例:ls -R /etc/ | more ,它翻到最后就退出了 less:一页一页地查看文件或STDIN输出查看时有用的命令包括:/文本 :搜索 文本n/N :跳到下一个 或

grep与正则表达式,grep、egrep和fgrep

grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大:1基础正则表达式grep 工具,以前介绍过.grep -[acinv]   '搜索内容串'   filename-a 以文本文件方式搜索-c 计算找到的符合行的次数-i 忽略大小写-n 顺便输出行号-v