2017-12-16Linux基础知识(17)egrep扩展正则表达式

回顾一下上一章所讲的内容,在上一章当中我们讲述了文本处理工具grep命令,它是由用户根据指定的"模式"来进行行匹配,默认为贪婪模式,讲匹配到的结果进行打印到标准输出中来,而正则表达式是由一群特殊的字符所编写的,其中有一些字符并不代表原有的字面意义,而是用于控制或通配的功能,而正则表达式共分类两类,一类是基本正则表达式,另一类是扩展正则表达式,二者区别就是它们的元字符有所不同,而元字符就是用来匹配和控制的功能,那么在这一章当中我们讲述egrep及扩展正则表达式命令。

一、egrep命令

除了我们之前讲到的grep命令之外,还有egrep和fgrep命令,那么grep现在都知道,是支持基本正则表达式,但使用-E选项就能够支持扩展正则表达式,egrep命令的特性为支持扩展正则表达式,但使用-G选项就能够支持基本正则表达式,那么fgrep则不支持基本正则表达式,也不支持扩展正则表达式,但使用以上那两个选项就能支持正则表达式,同样的,以上两个无论是grep和egrep只要使用-F选项就和fgrep一样不支持基本正则表达式和扩展的正则表达式。也就是说,这三个命令通过某些选项来调整其功能就能够支持任何两个命令的特性。
  那么egrep也就是支持扩展的正则表达式实现类似于grep文本过滤的功能,同时也可以使用grep -E也可以支持,那么其命令格式也是和grep命令一样:

   egrep [options] PATTERN [FILE...]

那么支持的选项也是和grep一样:

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

那么接下来我们说一下扩展正则表达式的元字符,它的元字符和基本正则表达式的元字符有很多都是一样的,只不过有些没有了转义符而已。

   字符匹配:
      .:任意单个字符;
      []:指定范围内的任意单个字符;
      [^]:指定范围外的任意单个字符;

   次数匹配:
      *:任意次,0, 1或多次;
      ?:0次或1次,其前面的字符是可有可无的。
      +:其前面的字符至少一次;
      {m}:其前面的字符m次;
      {m,n}:至少m次,至多n次;
       {0,n}
       {m}
        
   位置锚定:
      ^:行首锚定;
      $:行尾锚定;
      \<, \b:词首锚定;
      \>, \b:词尾锚定;
    
   分组及引用:
      ():分组:括号内的模式匹配到字符会被记录于正则表达式引擎的内部变量中;
      后向引用:\1, \2, ... (不能在bash中引用)

   或:
      a|b:a或者b
        C|cat:C或者cat;
        (C|c)at:Cat或者cat;

好的,以上就是扩展正则表达式的元字符,那么现在练习以下习题:
  1、找出/proc/meminfo中,所有在大写或小写开头S的行;至少有三种实现方式;

   # grep ^[sS] /proc/meminfo 
   # grep -E "^(s|S)" /proc/meminfo
   # grep -i "^s" /proc/meminfo

2、显示当前系统上root、centos或user1的相关信息:

   # grep -E "^(root|centos|user1)\>" /etc/passwd

3、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;

   # grep -Eo "^[_[:alpha:]]*\(\)[[:space:]]*" /etc/rc.d/init.d/functions

4、使用echo命令输出一条绝对路径,使用egrep取出基名;

   # echo "/etc/sysconfig" | grep -Eo "[^/]+?$"

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

   # ifconfig | grep -Eo "[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4]"

那么fgrep是不支持正则表达式元字符,当没有需要用到元字符去编写模式时,使用fgrep效果更佳;在生产环境中过滤日志时性能会更好。

二、文本查看及处理工具

在这一次我们主要讲以下几个命令:

   wc, cut, sort, uniq, diff, patch

wc命令是一个单词统计的命令,主要统计行数、单词数和字节数,其命令格式为:

   wc [OPTIONS]... [FILE]...

该命令的选项为:

   -l:lines, 统计行数;
   -w:words, 统计单词数;
   -c:bytes, 统计字节数;

cut命令是在文件的每一行中提取片段,在每个文件各个行中,把提取的片段显示到标准输出。其命令格式为:

   cut OPTIONS [FILE]...

该命令的选项为:

   -d CHAR:以指定的字符为分隔符;如果不指,默认为空白为分隔符;
   -f FILEDS:挑选出的字段;
      #:指定的多个字段;
      #-#:连续的多个字段;
      #,#:离散的多个字段;

sort命令是一个排序的命令,它是排序文本文件的行,其命令格式为:

   sort [OPTIONS]... [FILE]...

该命令的选项为:

   -n:基于数值大小而非字符进行排序;
   -t CHAR:指定分隔符;
   -k#:用于排序比较的字符;
   -r:逆序排序;
   -f:忽略字符大小写;
   -u:重复的行只保留一份;
      重复行:连续且相同;

示例:

   # sort -t: -k3 -n -r /etc/passwd

uniq命令是一个报告或移除重复的行,和sort命令中的-u选项差不多,那么其命令格式为:

   uniq [OPTIONS]... [INPUT [OUTPUT]]

该命令选项为:

   -c:显示每行的重复次数;
   -u:仅显示未曾重复过的行;
   -d:仅显示重复过的行;

那么diff命令是用来逐行匹配文件的不同之处,可以将其合并,给老文件进行打补丁,其命令格式为:

   diff [OPTIONS]... FILE

   diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE

patch就是向文件打补丁的命令,其命令格式为:

   patch [OPTIONS] -i /PATH/TO/PATH_FILE /PATH/TO/OLDFILE

   patch /PATH/TO/OLDDILE < /PATH/TO/PATCH_FILE
时间: 2024-08-01 11:58:25

2017-12-16Linux基础知识(17)egrep扩展正则表达式的相关文章

Python编程中常用的12种基础知识总结

原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进制转换,Python调用系统命令或者脚本,Python 读写文件. 1.正则表达式替换目标: 将字符串line中的 overview.gif 替换成其他字符串 1 2 3 4 5 6 7 8 9 10 11 >>> lin

Python 编程中常用的 12 种基础知识总结

Python 编程中常用的 12 种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进制转换,Python调用系统命令或者脚本,Python 读写文件. 1.正则表达式替换 目标:将字符串line中的 overview.gif 替换成其他字符串 >>> line = '<IMG ALIGN="middle" SRC=\'#\'" /s

php基础知识(5)正则表达式

一.匹配次数 (1) *     匹配前面的子表达式零次或多次 (2) +     匹配前面的子表达式一次或多次,+ 等价于 {1,} (3) ?     匹配前面的子表达式零次或一次,? 等价于 {0,1} (4){n}    n 是一个非负整数,匹配确定的n 次 (5){n,}   n 是一个非负整数,至少匹配n 次 (6){n,m}  m 和 n 均为非负整数,最少匹配 n 次且最多匹配 m 次.在逗号和两个数之间不能有空格 二.匹配值 (1) x|y    匹配 x 或 y (2)[xy

Egrep 扩展正则表达式及实例

grep -E  [OPTIONS] PATTERN [FILE...] -E:扩展正则表达式 字符匹配 .:任意单个字符 []:指定范围内的任意单个字符 [^]:指定范围外的任意单个字符 次数匹配 *:匹配其前字符任意次 ?:匹配其前字符0次或1次,不需要加反钭线\ +:匹配其前字符至少一次,相当于\{1,\}(?+组合相当于*) {m,n}:匹配其前字符至少m次至多n次,不需要加反钭线\ 位置锚定 ^ CHARE:行首锚定 CHARE $:行尾锚定 \< CHARE:词首锚定 CHARE \

React JS 基础知识17条

1. 基础实例 <!DOCTYPE html> <html> <head> <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="../build/browser.min.js"></script&g

Java基础知识强化75:正则表达式之分割功能 (扩展练习)

1. 看程序写结果:(面试题考过) 1 package cn.itcast_03; 2 3 /* 4 * 分割功能练习 5 */ 6 public class RegexDemo2 { 7 public static void main(String[] args) { 8 // 定义一个字符串 9 String s1 = "aa,bb,cc"; 10 // 直接分割 11 String[] str1Array = s1.split(","); 12 for (in

Java基础知识强化78:正则表达式之获取功能(Pattern 和 Matcher类的使用)

1. 获取功能: Pattern 和 Matcher类结合使用 2. 使用案例: 1 package cn.itcast_05; 2 3 import java.util.regex.Matcher; 4 import java.util.regex.Pattern; 5 6 /* 7 * 获取功能 8 * Pattern和Matcher类的使用 9 * 10 * 模式和匹配器的基本使用顺序 11 */ 12 public class RegexDemo { 13 public static v

Java基础知识强化79:正则表达式之获取功能(案例)

1. 获取下面这个字符串中由三个字符组成的单词. da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu? 2. 代码实现: 1 package cn.itcast_05; 2 3 import java.util.regex.Matcher; 4 import java.util.regex.Pattern; 5 6 /* 7 * 获取功能: 8 * 获取下面这个字符串中由三个字符组成的单词 9 * da j

Java基础知识强化72:正则表达式之概述和基本规则

A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') B:字符类 [abc] a.b 或 c(简单类) [^abc] 任何字符,除了 a.b 或 c(否定) [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) [0-9] 0到9的字符都包括 C:预定义字符类 . 任何字符.我的就是.字符本身,怎么表示呢? \. \d 数字:[0-9] \w 单词字符:[a-zA-Z_0-9] 在正则表