zoukankan      html  css  js  c++  java
  • grep用法

    grep 选项

        -c :只输出匹配行的计数。

        -i :忽略大小写(只适用于单字符)

        -n :显示匹配行及行号

        -v :取反(显示不匹配的行)

        -w :精确匹配某个字符

        -o :只显示被匹配到的字符串

       -A 显示匹配的行以及之后的N行

        -B 显示匹配的行以及之前的N行

        --no-group-separator

             当使用'-A', '-B' or '-C'时,不输出任何组分隔符,而是将不同组相邻输出。

        --color :以颜色的形式显示被匹配到字符

     

    我们可以通过设置别名来方便我们的操作

    alias grep='grep -n --color'

     

    再次使用grep 效果如下:

    [root@centos5 ~]# grep "root" /etc/passwd

    1:root:x:0:0:root:/root:/bin/bash

    11:operator:x:11:0:operator:/root:/sbin/nologin

    关键词已经被着色并且显示行号

     

    <1>[root@localhost etc]# grep -c "^root" passwd
             1
         这表示符合条件的行只有1行。
         <2>[root@localhost etc]# grep -n "^root" passwd
         1:root:x:0:0:root:/root:/bin/bash

         显示匹配行及行号     

         <3> -o -w的区别

         [root@localhost pangbing]# cat 1

              12

              123

              1234

              134

         -o 效果   

         [root@localhost pangbing]# grep -o '12' 1

                        12

                        12

                        12

         他把含有12的都过滤出来来了,但是多余的就去掉了

         -w效果

         [root@localhost pangbing]# grep -w '12' 1

               12

         他只匹配了12,精确匹配了

         

         -A效果

              [root@localhost pangbing]# grep  -w -A 1 '12' 1

              12

              123

            他将匹配的行的下一也打印出来

         -B效果

         [root@localhost pangbing]# grep  -w -B 1 '123' 1

              12

              123

      --no-group-separator

        [root@centos3 log]# cat abc

        123abcakshdjh fff

        qwe aaa

        asd bbb

        1111111111111

        sssssssssssssss

        123lzskjdfaklsjdkla fff

        aaa 123

        abv fvvv

        222222222222222222222

        aaaaaaaaaaaaaaaaaaaaa

        123dddddsadasdasd fff

        sdsdsd  asd

        sadsad  asdasd

        vvvvvvvvvvvvvvvvvv

     

      [root@centos3 log]# grep -A 2  "123" abc

        123abcakshdjh fff

        qwe aaa

        asd bbb

        --

        123lzskjdfaklsjdkla fff

        aaa 123

        abv fvvv

        222222222222222222222

        --

        123dddddsadasdasd fff

        sdsdsd  asd

        sadsad  asdasd

        此时过滤的结果当中有-- 分割符号,去掉这个符号加上--no-group-separator

        选项就没有了。

        grep -A 2 --no-group-separator "123" abc

    通配符:

        *  :任意长度的任意字符

        :单个字符

        [] :范围之内

        [^] :范围之外的

     

    二、正则表达式

        1. ():匹配任意单个字符

                匹配以r开头,t结尾中间只有两个字符的行

        例子:  [root@centos5 ~]# grep "r..t" /etc/passwd

                1:root:x:0:0:root:/root:/bin/bash

                11:operator:x:11:0:operator:/root:/sbin/nologin

                14:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

           

        2* :一个单字符后紧跟*,匹配0或个多个此单字符。(就是这个字符可以出现多次,也可以不出现。)

     

        3.* ; 表示任意长度的任意字符

        [root@centos5 ~]# cat abc

        a

        b

        ab

        aab

        acb

        adb

        amnb

       

        匹配a开头b结尾,中间是任意字符的行

        [root@centos5 ~]# grep "a.*b" abc

        ab

        aab

        acb

        adb

        amnb

    其中ab中间没有字符也会被匹配到。任意长度的任意字符也包括空格

     

    4a{n} : 用来匹配前面 a 的出现次数。n 为次数。

            [root@centos5 ~]# cat abc

            ab

            aab

            aaab

            aaaab

            aaaaaaab

     

            [root@centos5 ~]# grep --color "a{1}b" abc

            ab

            aab

            aaab

            aaaab

            aaaaab

           

            a只匹配了一次

    5a{n,} : 用来匹配前面 a 的出现次数。但是次数至少为n次。

            [root@centos5 ~]# grep "a{1,}b" abc

            ab

            aab

            aaab

            aaaab

            aaaaab

            a至少出现1次,出现多次也可以被匹配到

    6a{n,m} :用来匹配前面 a 的出现次数。但是a出现的次数在 n 和 m 之间

           

            [root@centos5 ~]# grep "a{1,3}b" abc

            ab

            aab

            aaab

            aaaab

            aaaaaaab

            这次匹配到的内容,只匹配了a最多3

     

    三、正则中的字符集合

    [:digit:]  表示数字

    [:lower:]  表示小写字母

    [:upper:]  表示大写字符

    [:alpha:]  表示所有字符

    [:punct:]  表示标点符号

    [:alnum:]  表示所有数字和字符

    在使用这些字符集合的时候,中括号外边必须在加一对中括号

     

    例子:[root@centos5 ~]# cat test

        a

        ab

        abc

        12

        123

        1234

        a1

        ab12

        abc123

        Abc

        ABC123

    要求1:过滤包含数字的行

    [root@centos5 ~]# grep  "[[:digit:]]" test

    12

    123

    1234

    a1

    ab12

    abc123

    ABC123

    或是用这种方法也可以

    grep -E  "[0-9]" test

     

     

    要求2:包含字符的行

    [root@centos5 ~]# grep "[[:alpha:]]" test

    a

    ab

    abc

    a1

    ab12

    abc123

    Abc

    ABC123

    或是用这种方法也可以

    grep -E  "[a-z]|[A-Z]" test

     

    在脚本中应用

    #!/bin/bash

    read -p "请输入内容: " a

    if [[ $a =~ [a-z]|[A-Z] ]];then

            echo "字符"

    else

            echo "非字符"

    fi

     

    用字符集合的话将[a-z]|[A-Z]替换成[[:alpha:]]

    #!/bin/bash

    read -p "请输入内容: " a

    if [[ $a =~ [[:alpha:]] ]];then

            echo "字符"

    else

            echo "非字符"

    fi

  • 相关阅读:
    es6里面的arr方法
    for循环比较
    window.location各属性的值
    浏览器的缓存机制
    es6中的双箭头函数
    前端开发模拟数据------webpack-api-mocker
    对象的深拷贝和浅拷贝
    Web应用程序的安全问题
    this指向问题
    postman使用篇最全整理
  • 原文地址:https://www.cnblogs.com/pangbing/p/6535562.html
Copyright © 2011-2022 走看看