一、什么是正则表达式
很可能我们经常会听到一些有经验的系统管理员告诉我们说:正则表达式非常重要。为什么说正则表达式非常重要呢?因为我们在使用文本编辑的时候或者编写shell脚本的时候经常会使用到查找、替换等工作。如果想把这些工作做的漂亮、完美、轻松就需要配合正则表达式来处理。那么什么是正则表达式呢?
简单的说,正则表达式就是处理字符串的方法,他是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让管理员轻易达到查找、删除、替换、某些特定字符串的处理程序。用一句简单的话概括就是:正则表达式是一类使用字符所书写的模式(pattern)。
二、正则表达式的用途
众所周知,对于系统管理员来说,每天要面对的数据信息多的无法想象,那么如何从这些海量的数据信息中找出我们需要的数据呢??如果只是用肉眼一行一行的查看显然是不现实的,此时系统管理员就需要通过正则表达式的功能来筛选出需要的数据信息。正则表达式对于系统管理员最广泛的用途就是清除服务器中的垃圾信息,例如清除邮件服务器中的垃圾邮件。
三、正则表达式的分组
正则表达式的字符串表示方式依照不同的严谨度而分为基本正则表达式与扩展正则表达式。扩展正则表达式除了简单的一组字符串处理之外,还可以做组的字符串处理。例如("或""|")操作。
基本正则表达式元字符:
注:”\”表示转义
^:锚定词首
$:锚定词尾
.:匹配任意单个字符
*:匹配任意长度的任意字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
\?:匹配紧挨在其前面的字符0次或1次
\{m,n\}:匹配其前面的字符至少m次至多n次
\<:锚定词首
>\:锚定词尾
\():分组
扩展正则表达式字符:
注:元字符同基本正则表达式
+:匹配其前面的字符至少一次
|:二选一例如:a|b满足a或者b均可
四、grep简单介绍
grep:(GlobalSearchRegularExmpressionandPrinting全面搜索正则表达式并把行打印出来)
grep的工作方式:它在一个或多个文件中搜索字符串模板(pattern)。搜索的结果被送到屏幕,不影响原文件内容。
语法:grep�[option][--color=auto]“查找字符串”filename
--color=auto:找到的关键字自动添加颜色
-v:反向选取,只显示不符合模式的行
-o:只显示匹配到的字符串,而不是整个行
-i:不区分大小写
-E:grep�E=egrep后接扩展的正则表达式
五、grep与正则表达式应用实例
注:系统环境RedHatEnterpriseLlnux6
实例中涉及到的管道命令不做详细解释
1.选出/etc/passwd文件中以字母。
#grep --color=ahto "^[ad]" /etc/passwd
2.选出/etc/passwd文件中以字符串nologin结尾的行。
#gerp --color=auto "nologin$" /etc/passwd
3.显示/etc/rc.d/rc.sysinit中符合形为“以任意单个字符n任意单个字符t结尾”模式的行。
#gerp --color=auto ".n.t$" /etc/rc.d/rc.sysinit
4.匹配字符a零次或一次。注:grep.txt文件自行创建
#gerp --color=auto "a\?b" grep.txt
5.找出/etc/passwd文件中的1位数或2位数或3位数。
#gerp --color=auto "\<[0-9]\{1,3\}\>" /etc/rc.d/rc.sysinit
6.显示/etc/rc.d/rc.sysinit中符合形为任意单个字符后面跟了个n,n后面有任意单个字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符与前面的n之前的字符相同。
#gerp --color=auto "\(.n\).\1" /etc/rc.d/rc.sysinit
7.找出/stc/passwd文件中含有单词bin或sbin中的行。
#egerp --color=auto "\<bin\>|\<sbin\>" /etc/rpasswd #gerp -E --color=auto "\<bin\>|\<sbin\>" /etc/rpasswd
8.统计/etc/rc.d/rc.sysinit的空白行,非空白行,总行数。
#gerp "^$" /etc/rc.d/rc.sysinit | wc -l #gerp -v "^$" /etc/rc.d/rc.sysinit | wc -l #cat /etc/rc.d/rc.sysinit | wc -l
9.取出默认shell为bash,且其用户ID号最小的用户的用户名。
#gerp --color=auto "/bin/bash$" /etc/passwd | sort -n -t: -k3 head -1 | cut -d: -f1
10.匹配点分十进制IP地址。
模式(pattern):"\<([1-9]|[0-9][1-9]|1[0-9][0-9]|2[0-2][0-3])\.([0-9]|[0-9][1-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[0-9][1-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[0-9][1-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"
ifconfig | egrep --color=auto "\<([1-9]|[0-9][1-9]|1[0-9][0-9]|2[0-2][0-3])\.([0-9]|[0-9][1-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[0-9][1-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[0-9][1-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"