一、正则表达式的相关概念
正则表达式(或称为常规表达式)是通过一些特殊字符的排列,用以搜索/替换/删除一行或多行字符串等。简而言之,正则表达式就是处理字符串的方法。
正则表达式对于系统管理员来说是不可不学的,因为在系统繁忙的情况下,每天都会产生大量信息,而要从千百行的数据里查找有问题的行,用肉眼很难完成。而通过正则表达式将这些信息进行处理分析,系统管理将会变得很轻松。
二、正则表达式的基本运用及相关命令(grep、egrep命令)
基本正则表达式:
字符匹配:
.:匹配任意单个字符
[ ]: 匹配指定范围内的任意单个字符
[^]: 匹配指定范围外的任意单个字符
[0-9],[[:digit:]] 任意数字
[^0-9],[^[:digit:]] 出数字之外任意字符
[a-z],[[:lower:]] 任意小写字母
[A-Z],[[:upper:]] 任意大写字母
[[:space:]] 空白字符
[[:punct:]] 任意标点符号
[0-9a-zA-Z],[[:alnum:]] 任意字母和数字
[a-zA-Z],[[:alpha:]] 任意字母
次数匹配:
*:其左侧的字符出现任意次(0次,一次或多次);
例:以下例子中均使用1.txt
.*:任意长度任意字符,工作于贪婪模式
\?:其左侧的字符出现0次或1次
\+:其左侧的字符出现1次或多次
\{m\}:精确匹配其左侧的字符出现m次
\{m,n\}:匹配其左侧字符至少出现m次,至多出现n次
\{0,SimKai;">至多n次;
:至少m次;
位置锚定:
^: 锚定行首
$: 锚定行尾
^PATTERN $:用模式来匹配整行;
^$: 匹配空白行;
单词锚定:由非特殊字符组成的连续的字符串
\< :锚定词首,也可用\b
\<PATTERN,或\bPATTERN
\> :锚定词尾,也可以用\b
PATTERN\>,或PATTERN\b
\<PATTERN\>:匹配PATTERN能匹配到的整个单词
分组:\(\)
注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆(保存于内置的变量中,这些变量是\1,\2,...),因此,还可以被引用;
\1:引用,模式中自左而右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容;
\2:引用,模式中自左右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容
三、扩展正则表达式(egrep命令)
扩展正则表达式简化了基础正则表达式的命令,使用起来更加方便
扩展的正则表达式元字符及其意义:
*: 匹配任意次
?:0或1次
+: 至少1次
{m}:精确匹配m次;
{m,n}:至少m次,至多次;
:至少m次;
{0,SimKai;">| :或者(a|b:a或者b 或者两侧的所有内容)
grep命令:
grep [OPTIONS] PATTERN [FILE...]
模式中包含变量,变量替换需双引号“”,否则单双引号都可以
-i: ignore case,不区分字符大小写
-E:使用扩展的正则表达式(egrep)
-A #:after 被模式匹配到的行及后边的#行
-B #:before被模式匹配到的行及前边的#行
-C #-C 2 前后各两行
例子
显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行
基本正则表达式# grep "^#[[:space:]]\+[^[:space:]]\+"/etc/rc.d/rc.sysinit
扩展正则表达式# egrep "^#[[:space:]]+[^[:space:]]+" /etc/rc.d/rc.sysinit