Skip to content

常规匹配

cat /etc/passwd | grep foo

常用特殊字符

  • ^

    匹配一行的开头 cat /etc/passwd | grep ^f

  • $

    匹配一行的结束 cat /etc/passwd | grep bash$

    cat /etc/passwd | grep -n ^$ 匹配空行并显示行号

  • .

    匹配一个任意的字符

    cat /etc/passwd | grep r..t 匹配包含 r**t 的所有行

    不单独使用,和上一个字符连用,表示匹配上一个字符 0 次或多次

    cat /etc/passwd | grep ro*t 匹配 rt、rot、root、rooot... 的所有行

    cat /etc/passwd | grep .* 匹配任意字符串,包括空字符串。

  • []

    字符区间,表示匹配某个范围内的一个字符。

    • [6,8]

      匹配 6 或 8

    • [0-9]

      匹配一个 0 - 9 的数字

    • [0-9]*

      匹配任意长度的数字字符串

    • [a-z]

      匹配一个 a - z 的字符

    • [a-z]*

      匹配任意长度的字母字符串

    • [a-c,e-f]

      匹配 a - c、e - f 之间的符号

    cat /etc/passwd | grep r[a,b,c]*t cat /etc/passwd | grep r[abc]*t 可以省略逗号

  • \

    转义

    cat /etc/passwd | grep '$' 还必须加上单引号

匹配手机号

echo "13333333333" | grep ^1[34578][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$

grep 默认不支持 {} echo "13333333333" | grep ^1[34578][0-9]{9}$

-E 表示支持扩展的正则表达式 echo "13333333333" | grep -E ^1[34578][0-9]{9}$