首页 > 代码库 > 正则表达式

正则表达式

一、什么是正则

  正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。

在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,grep、sed、awk,他们三者均可解释正则

二、grep

参数

  grep用来进行过滤操作

    -n:显示行号

    -o:只显示匹配的内容

    -q:静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

    -l:如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl ‘root‘ /etc

    -A:匹配成功后,将匹配行和其后n行一起打印出来

    -B:匹配成功后,将匹配行和其前n行一起打印出来

    -C:匹配成功后,将匹配行和其前后n行一起打印出来

    -c:匹配成功后,将匹配到的行数打印出来

    -E:等于egrep,扩展

    -i:忽略大小写

    -v:取反,不匹配

    -w:匹配单词

正则介绍

  ^行首  如:‘^grep’匹配所有以grep开头的行

  $行尾  如:‘grep$’匹配所有以grep结尾的行

  .除了换行符意外的任意单个字符  如:‘gr.p’匹配gr后接一个任意字符,然后是p

  *前导字符的零个或多个  如:‘ab*c’匹配ac中间有零个或多个b的行。

  .*所有字符  如:‘a.*c’匹配ac中间任意字符及数量的字符

  ?前导字符零个或一个

  +前导字符一个或多个

  []字符组内的任一字符  

  [^]对字符组内的每个字符取反(不匹配字符组内的每个字符)

  ^[^]非字符组内的字符开头的行

  [a-z]小写字母

  [A-Z]大写字母

  [a-Z]所有字母

  [0-9]数字

  \<单词头 单词一般以空格或特殊字符做分割,连续的字符串被当做单词

  \>单词尾

  abc|dfg  abc或dfg

  a(bc|de)f   abcf或adef

  x\{m\}   x 出现m次

  x\{m.\}  x出现m次至多次(至少m次)

  x\{m,n\}  x出现m次至n次

示例

  目标文件/etc/passwd

  1.grep ‘root‘ /etc/passwd  显示出所有含有root的行

  2.grep -C2 ‘bash‘ /etc/passwd  输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容

  3.grep -c ‘nologin‘ /etc/passwd  显示出有多少行含有nologin

  4.grep -n ‘root‘ /etc/passwd  显示出那些行含有root,并将行号一块输出。

  5.新建用户

    abominable

    abominate

    anomie  

    atomize

   编写正则表达式,将他们匹配出来:egrep ‘a.omi‘ /etc/passwd

  6.grep -rl ‘root‘ /etc  显示出/etc目录下所有包含root的文件名

  7.过滤掉/etc/ssh/sshd_config内所有注释和所有空行

  grep -v ‘^#‘ /etc/ssh/sshd_config |grep -v ‘^ *$‘

 

正则表达式