grep的使用,正则表达式

文本处理grep
    grep :根据模式去搜索文本,并将匹配到的文本显示出来
pattern(模式):文本字符和正则表达式的元字符组合而成的匹配条件
正则表达式:(REGular EXPression)正则表达式就是处理字符串的方法,通过一些特殊字符的辅助,让用户轻松方便的达到查找、删除、修改特定字符串的处理程序
grep 的用法
    name: grep, egrep, fgrep – print lines matching a pattern
  grep [OPTIONS] PATTERN [FILE…]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
option:
  –color=auto    匹配到的字符串带颜色显示出来(auto的自动附加颜色)
  -i :匹配字符的时候忽略大小写
        example: grep -i  “uuid”  /etc/passwd
  -v : 取反,显示没有被匹配到的行
      example: grep -v  “uuid”  /etc/passwd
  -n:显示匹配的行号
       -c: 统计匹配的行数
       -o: 仅显示匹配到的字符串,其他不显示
       -q: 静默模式,不输出任何信息(相当于重定向到&>/dev/null)
       -A #: after, 后#行
       -B #: before, 前#行
       -C #:context, 前后各#行 显示匹配到字符串的前后各#行
       -e:实现多个选项间的逻辑or关系
           grep –e ‘cat ’ -e ‘dog’ file
       -w:匹配整个单词
            example: grep -w bash filename   (bash 可以匹配   basher 匹配不到)
               数字,字母,下划线不可以作为单词的分隔符(界线)
       -E:使用ERE(grep -E 相当于 egrep)
       -F:相当于fgrep,不支持正则表达式
字符匹配:
       . 匹配任意单个字符
       example: r..t    root,rabt,r12t(字母,数字,符号,相同不相同,只要是两个) 都可以匹配。
       [] 匹配指定范围内的任意单个字符
       example: [abcd] 匹配到a或者b或者c或者d
       [^] 匹配指定范围外的任意单个字符
       example: [^wang]匹配wang之外的字符
       [:alnum:] 字母和数字
       [:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z
       [:lower:] 小写字母[:upper:] 大写字母
       [:blank:] 空白字符(空格和制表符)
       [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
       [:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
       [:digit:] 十进制数字[:xdigit:]十六进制数字
       [:graph:] 可打印的非空白字符
       [:print:] 可打印字符
       [:punct:] 标点符号
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
       * 匹配前面的字符任意次,包括0次(工作在贪婪模式)
            贪婪模式:尽可能长的匹配
       .*任意长度的任意字符
       \?匹配其前面的字符0或1次
       example :  root\?  表示匹配其前面的字符也就是t一次或者0次 比如:root  roo
       \+匹配其前面的字符至少1次
       example : root\+  表示匹配t字符至少一次以上,比如:root  roottt rootttttt
       \{n\}匹配前面的字符n次
       \{m,n\}匹配前面的字符至少m次,至多n次
       \{,n\}匹配前面的字符至多n次
       \{n,\}匹配前面的字符至少n次
    位置锚定:定位出现的位置
       ^ 行首锚定,用于模式的最左侧
       $ 行尾锚定,用于模式的最右侧
       ^PATTERN$ 用于模式匹配整行
           ^$ 空行
           ^[[:space:]]*$ 空白行
       \< 或\b词首锚定,用于单词模式的左侧
       \> 或\b词尾锚定;用于单词模式的右侧
       \<PATTERN\>匹配整个单词
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,
            如:\(root\)\+,将root作为一个整体使用,root\+ 只是匹配t字符
         分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
         \1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
             示例:\(string1\+\(string2\)*\)
                   \1 :string1\+\(string2\)*
                   \2 :string2
        后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
练习
   1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
        grep -i “^s” /proc/meminfo
grep -e ^s -e ^S /proc/meminfo
  2、显示/etc/passwd文件中不以/bin/bash结尾的行
        grep -v “/bin/bash$” /etc/passwd
  3、显示用户rpc默认的shell程序
        grep -w “^rpc” /etc/passwd |cut -d: -f7
  4、找出/etc/passwd中的两位或三位数
        grep -o “\b[0-9]\{2,3\}\b” /etc/passwd
  5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行
        grep “^[[:space:]]\+[^[:space:]]” /etc/grub2.cfg
  6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行
        netstat -tan |grep “LISTEN[[:space:]]*$”
  7、显示CentOS7上所有系统用户的用户名和UID
        cut -d: -f1,3 /etc/passwd |grep “\b[0-9]\{1,3\}$”
  8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名同shell名的行
        grep “^\(.*\)\>.*\b\1$” /etc/passwd
   9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
        df |grep “/dev/sd” |grep -o “[0-9]\{1,3\}%” |grep -o “[0-9]\{1,3\}” |sort
扩展正则表达式 ,egrep
      egrep = grep -E
 egrep[OPTIONS] PATTERN [FILE…]
  字符匹配:(用法和grep用法一致)
       . 任意单个字符
       [] 指定范围的字符
       [^] 不在指定范围的字符
   次数匹配:
       *:匹配前面字符任意次
       ?: 0或1次
       +:1次或多次
      {m}:匹配m次
      {m,n}:至少m,至多n次
  位置锚定:
       ^ :行首
       $ :行尾
       \<, \b :语首
       \>, \b :语尾
   分组:
       ()
       后向引用:\1, \2, …
   或者:(|表示或者,|前后分别是两个字符,)
        a|b: a或b
        C|cat: C或cat
        (C|c)at:Cat或cat  (括号表示展开)

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88866

(0)
燕李鹏燕李鹏
上一篇 2017-11-25 11:40
下一篇 2017-11-25 23:10

相关推荐

  • 揭开链接文件的面纱——从根本上剖析硬链接与软链接异同

    在linux的学习过程中,链接文件的学习让不少人头疼,很多同学往往分不清什么是硬链接,什么是软链接,对于两者的概念和区别常常容易混淆、搞不清楚。今天我们就从原理、从根本上为大家辨析一些两者之间的区别,相信大家在看完这篇文章之后对链接文件会有一个清晰正确的认识。 1、在实现原理上不同 硬链接,涉及到文件的底层模式,因此被称为硬链接文件。硬链接文件只是一个指针指…

    Linux干货 2016-10-20
  • oracle6.7使用udev作为asm

    1、需求 oracle6.7使用udev作为asm /dev/sdb <–> /dev/asm-diskb /dev/sdc <–> /dev/asm-diskc /dev/sdd <–> /dev/asm-diskd /dev/sde <–> /dev/asm-…

    Linux干货 2016-07-29
  • Linux终端类型

    前言 终端是一个很重要的外设,用过终端设备的人都知道如果设备类型不对就会有乱字符,也可用仿真终端软件如netterm试验一下,Linux的终端信息放在 /usr/share/terminfo下,在这个目录的子目录v下就有许多的如vt100,vt102,vt200等,看一下就知道了。 终端类型的区别与概念 1、 pty(虚拟终端): 但是如果我们远程telne…

    Linux干货 2016-10-14
  • Linux网络属性配置

      一台主机想要接入网络就必须配置相关的网络属性,如:主机名、IP地址、子网掩码、网关、DNS等,下面总结了网络属性的配置方法。 一、配置主机名   主机名配置有两种方式:命令和配置文件。   1、hostname命令    可以使用hostname命令来配置主机名,不过这样配置的主机名不会永久生效,只能在当…

    Linux干货 2016-01-06
  • 初学正则表达式

      前言:     在学正则表达式之前,有小伙伴讲解说,正则表达式在文本处理上功能非常强大、使用非常普遍,并且现在很多的工具软件都支持它,以后的学习工作中会经常使用,非常灵活,但是灵活的同时又是繁琐,需要小心翼翼的仔细推敲。抱着认真、好奇的心思听完了王老的课。我自己理解的正则表达式是,给一些符号赋予一定的涵义…

    Linux干货 2016-08-12
  • ​文件系统层级结构标准

    多数Linux发行版遵从FHS标准并且声明其自身政策以维护FHS的要求。 [1] [2] [3] [4] 然而,包括由自由标准小组成员在内开发的绝大多数发行版(截至2009年),并不完全执行建议的标准。
    当FHS创建之时,其他的UNIX和类Unix操作系统已经有了自己的标准,尤其是hier(7)文件系统布局描述。 自从第七版Unix(于1979年)发布以来已经存在,或是SunOS filesystem(7), [5] 和之后的Solaris filesystem(5)。 例如,Mac OS X使用如 /Library、 /Applications和/Users 等长名与传统UNIX目录层次保持一致。
    现在的Linux发行版包含一个/sys目录作为虚拟文件系统(sysfs,类似于 /proc,一个procfs),它存储且允许修改连接到系统的设备,然而许多传统UNIX和类Unix操作系统使用/sys作为内核代码树的符号链接。
    一些Linux系统如GoboLinux和Syllable Server使用了和FHS完全不同的文件系统层次组织方法。

    Linux干货 2016-10-17