首页 > 代码库 > linux学习之grep egrep 命令及正则表达式

linux学习之grep egrep 命令及正则表达式

   有幸在马哥面授班学习linux,马哥常告诉我们要做就做到最好,希望通过这些博文把自己的学习经历和内容好好的记录下来,也算是复习。

   

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

 文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行。

 grep [OPTION]... ‘PATTERN‘ FILE...
  --color

 正则表达式:由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配的功能;
  元字符:

  两类:
   基本正则表达式
   扩展正则表达式

 基本正则表达式:
  字符匹配:
    .: 匹配任意单个字符
   []:匹配指定集合中的任意单个字符
      [[:digit:]], [0-9]
      [[:lower:]], [a-z]
      [[:upper:]], [A-Z]
      [[:alpha:]], [a-zA-Z]
      [[:alnum:]], [0-9a-zA-Z]
      [[:space:]],空白字符
      [[:punct:]],标点符号
   [^]:匹配指定集合外的任意单个字符
  匹配次数:用于对其前面紧邻的字符所能够出现的次数作出限定
   *: 匹配其前面的字符任意次,0,1或多次;
    例如:grep ‘x*y‘
     xy, xxy, xxxy, y
   \?:匹配其前面的字符0次或1次;
    例如:grep ‘x\?y‘
     xy, xxy, y, xxxxxy, aby
   \+: 匹配其前面的字符出现至少1次;
   \{m\}: 匹配其前面的字符m次;
    例如:grep ‘x\{2\}y‘
     xy, xxy, y, xxxxxy, aby
   \{m,n\}:匹配其前面的字符至少m次,至多n次;
    例如: grep ‘x\{2,4\}y‘
      xy, xxy, y, xxxxxxy, aby
       grep ‘x\{0,4\}y‘
        xy, xxy, y, xxxxxxxxxy, aby
       grep ‘x\{2,\}y‘
        xy, xxy, y, xxxxxy
   .*: 匹配任意长度的任意字符
  位置锚定:
   ^: 行首锚定
    写在模式的最左侧
   $: 行尾锚定
    写在模式的最右侧
   ^$: 空白行

   \<: 词首锚定, 或\b
    出现在要查找的单词模式的左侧;\<char
   \>:词尾锚定, 或\b
    出现在要查找的单词模式的右侧;char\>
   \<pattern\>: 匹配单词
  分组: \(\)同时匹配多个字符

        例如:‘ab\{1,3\}x‘  可以匹配abx  abbx   abbbx

                 ‘\(ab\)\{1,3\}x‘ 可以匹配abx  ababx  abababx

   后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用;
    \1, \2, \3
    模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容;

 grep选项:
  -v: 反向选取
  -o: 仅显示匹配到内容
  -i: 忽略字符大小写
  -E: 使用扩展正则表达式
  -A #: 匹配到的行向下多显示#行
  -B #:匹配到的行向下多显示#行
  -C #:匹配到的行向上向下多显示#行

 

扩展正则表达式:
        和基本正则表达式大同小异,一般在匹配时无需加转义符\,只有几个特定的需要加转义\
        *,?,+,{m},{m,n},^,$,\<,\>,\1,\2
        条件选择:a|b

 

 


练习:

1、显示/proc/meminfo文件中以大写或小写S开头的行;

wKiom1RyBO7hLvYoAAEmGSdzako520.jpg

 

2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户

wKioL1RyBWyBVa6OAAG4wUWzZOY635.jpg

3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
    并上述结果中其ID号最大的用户;  

wKiom1RyBO-QRfjuAAGdvGiMB_g193.jpg

4,找出当前系统上其用户名和默认shell相同的用户

 

wKioL1RyBW6gyoowAAENihiIgQE185.jpg

 

5,找出/etc/passwd文件中的一位数或两位数;

wKiom1RyBPLhrb48AAMXu-qfGas665.jpg

 

6,显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

wKioL1RyBXHyEfzkAAEWJ9RV0Ck234.jpg

 

 7,显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

wKioL1RyBXSzbggoAAJUCnGNXkI650.jpg


 

 

 

linux学习之grep egrep 命令及正则表达式