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

  • 相关阅读:
    DNNClassifier 深度神经网络 分类器
    浏览器对MP4视频 帧宽度 高度的兼容性
    UnicodeEncodeError:'latin-1' codec can't encode character
    文件夹下 文件计数
    the largest value you actually can transmit between the client and server is determined by the amount of available memory and the size of the communications buffers.
    the “identity” of an object
    广告特征 用户特征
    如果一个维度全覆盖,则有效维度应该对该维度全覆盖
    a high-level neural networks AP
    使用 LDA 挖掘的用户喜好主题
  • 原文地址:https://www.cnblogs.com/pangbing/p/6535562.html
Copyright © 2011-2022 走看看