正则表达式
Posted Optimus丶G
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
一、什么是正则
正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。
在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 ‘^ *$‘
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章