一、正则表达式的相关概念

  正则表达式(或称为常规表达式)是通过一些特殊字符的排列,用以搜索/替换/删除一行或多行字符串等。简而言之,正则表达式就是处理字符串的方法

  正则表达式对于系统管理员来说是不可不学的,因为在系统繁忙的情况下,每天都会产生大量信息,而要从千百行的数据里查找有问题的行,用肉眼很难完成。而通过正则表达式将这些信息进行处理分析,系统管理将会变得很轻松。

   二、正则表达式的基本运用及相关命令grepegrep命令

 基本正则表达式:

 字符匹配

         .   :匹配任意单个字符

         [ ]  : 匹配指定范围内的任意单个字符

         [^] : 匹配指定范围外的任意单个字符

         [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

  正则表达式基本运用_相关命令

 

.*任意长度任意字符工作于贪婪模式              

 正则表达式基本运用_相关命令_02

\?其左侧的字符出现0次或1

正则表达式基本运用_相关命令_03

\+其左侧的字符出现1次或多次

 正则表达式基本运用_正则表达式 _04

\{m\}精确匹配其左侧的字符出现m

 正则表达式基本运用_相关命令_05

\{m,n\}匹配其左侧字符至少出现m至多出现n

 正则表达式基本运用_正则表达式 _06

\{0,n\}至多n

 正则表达式基本运用_正则表达式 _07

\{m,\}至少m

正则表达式基本运用_正则表达式 _08

位置锚定:

^: 锚定行首

$: 锚定行尾

^PATTERN $用模式来匹配整行

^$: 匹配空白行

 正则表达式基本运用_正则表达式 _09


单词锚定:由非特殊字符组成的连续的字符串

\< :锚定词首也可用\b

\<PATTERN, \bPATTERN

         \> 锚定词尾也可以用\b

            PATTERN\>, PATTERN\b

正则表达式基本运用_相关命令_10 

\<PATTERN\>匹配PATTERN能匹配到的整个单词

正则表达式基本运用_相关命令_11

分组\(\)

        注意分组中的模式在某次的具体匹配过程中所匹配到的字符可以被grep记忆保存于内置的变量中,这些变量是\1, \2, ...),因此,还可以被引用

      \1:引用,模式中自左而右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容;

       \2:引用,模式中自左右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容

       例:      正则表达式基本运用_相关命令_12                                 

 

三、扩展正则表达式egrep命令

扩展正则表达式简化了基础正则表达式的命令,使用起来更加方便

扩展的正则表达式元字符及其意义:

*: 匹配任意次

?01

+: 至少1

{m}精确匹配m

{m,n}至少m至多次

{m,}至少m

{0,n}至多次

 | 或者a|ba或者或者两侧的所有内容)


grep命令

                      grep [OPTIONS] PATTERN [FILE...]

模式中包含变量,变量替换需双引号“”,否则单双引号都可以

-o: 只显示被模式匹配到的内容

-i: ignore case不区分字符大小写

-v: 显示不能够被模式匹配到的行(匹配到的不显示)

-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