zoukankan      html  css  js  c++  java
  • linux初级学习笔记十:linux grep及正则表达式!(视频序号:04_4)

    本节学习的命令:grep

    本节学习的技能:

          grep对文本的匹配

          正则表达式的使用

    知识点十:grep及正则表达式(4_4)

    grep,egrep,fgrep:

      grep: 根据模式搜索文本,并将符合模式的文本行显示出来。

      Pattern(模式): 文本字符和正则表达式的元字符组合而成匹配条件

    语法定义: 
      grep [options] PATTERN [FILE...]
        -i:表示忽略大小写     --color:把匹配到的值显示颜色     -v: 显示没有被模式匹配到的行     -o:只显示被模式匹配到的字符串
    文件名通配, globbing(回顾)
    
      *: 任意长度的任意字符
    
      ?:任意单个字符
    
    []:匹配指定范围内的任意单个字符
    [^]: 匹配指定范围之外的任意单个字符
    1 grep 'root' /etc/passwd  --只显示/etc/passwd文件中符合查找‘root’的行
    2 
    3 grep --color 'root' /etc/passwd
    4 
    5 alias grep='grep --color'
    6 grep 'root' /etc/passwd 
    7 
    8 grep -v 'root' /etc/passwd
    9 grep -o 'root' /etc/passwd
    grep命令测试

    正则表达式(REGular EXPression, REGEXP):

      元字符:

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

        匹配次数(贪婪模式)

          *  : 匹配其前面的字符任意次

              数据:a, b, ab, aab, acb, adb, amnb

              匹配结果:a*b:b,ab,aab,acb,adb,amnb

                 a?b:b,ab,aab,acb,adb,amnb

                   a.*b:ab,aab,acb,adb,amnb

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

          ?  : 匹配其前面的字符1次或0次

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

            {1,}:匹配前面的字符至少1次

                    {0,3}:匹配前面的字符1到3次

        位置锚定:

          ^  : 锚定行首,此字符后面的任意内容必须出现在行首

          $  : 锚定行尾,此字符前面的任意内容必须出现在行尾

          ^$  : 空白行

          <或  : 锚定词首,其后面的任意字符必须作为单词首部出现

          >或  : 锚定词尾,其前面的任意字符必须作为单词的尾部出现

     

        分组:

          ()

          后向引用

            1: 引用第一个左括号以及与之对应的右括号所包括的所有内容

            2:

            3:

     

     1 --正则表达式
     2 grep 'r..t' /etc/passwd
     3 
     4 vi a.txt 
     5 数据 
     6     a
     7     b
     8     ab
     9     aab
    10     acb
    11     adb
    12     amnb
    13     
    14 grep 'a*b' a.txt
    15 grep 'a.*b' a.txt
    16 grep 'a?b' a.txt
    17 
    18 grep 'a{1,3}b' a.txt
    19 
    20 grep '^r..t' /etc/passwd
    21 grep 'w$' /etc/inittab
    22 grep 'b..h$' /etc/passwd
    23 grep '^$' /etc/inittab
    24 
    25 grep '[[:digit:]]$' /etc/inittab
    26 grep '[[:space:]][[:digit:]]$' /etc/inittab
    27 
    28 vi test2.txt 
    29 数据:
    30     This is root.
    31     The user is mroot.
    32     rooter is a dog's name.
    33     chroot is a command.
    34     mrooter is not a word.
    35     
    36 grep 'root>' test2.txt
    37 grep '<root' test2.txt
    38 grep '<root>' test2.txt
    39 
    40 grep '(ab)*' a.txt
    41 
    42 vi test3.txt
    43 数据:
    44     He love his lover.
    45     She like her liker.
    46     He like his lover.
    47 
    48 grep 'l..e' test3.txt
    49 grep 'l..e.*l..e' test3.txt
    50 grep '(l..e).*1' test3.txt
    51 
    52 grep '([0-9]).*1$' /etc/inittab
    正则表达式测试

    课后作业:

     1 练习:
     2 1、显示/proc/meminfo文件中以不区分大小的s开头的行;
     3 grep -i '^s' /proc/meminfo
     4 grep '^[sS]' /proc/meminfo
     5 2、显示/etc/passwd中以nologin结尾的行; 
     6 grep 'nologin$' /etc/passwd
     7 
     8 取出默认shell为/sbin/nologin的用户列表
     9 grep "nologin$' /etc/passwd | cut -d: -f1
    10 
    11 取出默认shell为bash,且其用户ID号最小的用户的用户名
    12 grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1
    13 
    14 3、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
    15 grep "^#[[:space:]]{1,}[^[:space:]]" /etc/inittab
    16 
    17 4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
    18 grep ':[0-9]:' /etc/inittab
    19 
    20 5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
    21 grep '^[[:space:]]{1,}' /boot/grub/grub.conf
    22 
    23 6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
    24 grep '^([0-9]).*1$' /etc/inittab
    25 
    26 练习:
    27 1、找出某文件中的,1位数,或2位数;
    28 grep '[0-9]{1,2}' /proc/cpuinfo
    29 grep --color '<[0-9]{1,2}>' /proc/cpuinfo
    30 
    31 2、找出ifconfig命令结果中的1-255之间的整数;
    32 
    33   
    34 3、查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
    35 grep '^student>' /etc/passwd | cut -d: -f3
    36 id -u student
    37 
    38 student1
    39 student2
    40 
    41 练习:分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:
    42 l1:1:wait:/etc/rc.d/rc 1
    43 l3:3:wait:/etc/rc.d/rc 3
    44 
    45 grep '^l([0-9]):1.*1$' /etc/inittab
    课后练习
    这都是我对自己学习过程的理解,如有错误请指出!我算一个小白了。
  • 相关阅读:
    用vbox搭建Linux服务器
    mysql数据库两表关联查询统计同一字段不同值的个数
    2019-06-16 Java学习日记之XML&tomcat
    2019-06-15 Java学习日记之mysql多表查询
    2019-06-14 Java学习日记之SQL
    2019-06-13 Java学习日记之MySql
    XML & Tomcat
    数据库的CRUD操作
    PrepareStatement
    Dao模式(data Access Object 数据访问对象)
  • 原文地址:https://www.cnblogs.com/darwinli/p/9043330.html
Copyright © 2011-2022 走看看