grep用法

Posted 借风拥你

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep用法相关的知识,希望对你有一定的参考价值。

grep 选项

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

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

    -n :显示匹配行及行号

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

    -w :精确匹配某个字符

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

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

 

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

alias grep=‘grep -n --color‘

 

再次使用grep 效果如下:

[[email protected] ~]# grep "root" /etc/passwd

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

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

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

 

通配符:

    *  :任意长度的任意字符

    :单个字符

    [] :范围之内

    [^] :范围之外的

 

二、正则表达式

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

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

    例子:  [[email protected] ~]# 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.* ; 表示任意长度的任意字符

    [[email protected] ~]# cat abc

    a

    b

    ab

    aab

    acb

    adb

    amnb

   

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

    [[email protected] ~]# grep "a.*b" abc

    ab

    aab

    acb

    adb

    amnb

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

 

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

        [[email protected] ~]# cat abc

        ab

        aab

        aaab

        aaaab

        aaaaaaab

 

        [[email protected] ~]# grep --color "a\{1\}b" abc

        ab

        aab

        aaab

        aaaab

        aaaaab

       

        a只匹配了一次

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

        [[email protected] ~]# grep "a\{1,\}b" abc

        ab

        aab

        aaab

        aaaab

        aaaaab

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

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

       

        [[email protected] ~]# grep "a\{1,3\}b" abc

        ab

        aab

        aaab

        aaaab

        aaaaaaab

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

 

三、正则中的字符集合

[:digit:]  表示数字

[:lower:]  表示小写字母

[:upper:]  表示大写字符

[:alpha:]  表示所有字符

[:punct:]  表示标点符号

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

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

 

例子:[[email protected] ~]# cat test

    a

    ab

    abc

    12

    123

    1234

    a1

    ab12

    abc123

    Abc

    ABC123

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

[[email protected] ~]# grep  "[[:digit:]]" test

12

123

1234

a1

ab12

abc123

ABC123

或是用这种方法也可以

grep -E  "[0-9]" test

 

 

要求2:包含字符的行

[[email protected] ~]# 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

以上是关于grep用法的主要内容,如果未能解决你的问题,请参考以下文章

Linux bash 文本处理命令awk,sed,grep 用法

grep用法

grep 和vim用法

grep过滤用法介绍

linux中grep的用法详解

linux中grep命令的用法