rhce之路--正则表达式

 1.什么是正则表达式?

     要想管理好主机,任何一名有经验的系统管理员都会告诉你,“正则表达式很重要”。为什么重要呢?因为在日常的管理主机的过程中,

主要的就是处理文本字符,而正则表达式恰恰是处理文本所离不开的工具。

 

总之,正则表达式就是处理字符串的方法,以行为单位进行字符串的处理,通过一些特殊符号的辅助,可以让用户轻松的处理文本。

 

对于一般用户而言,使用正则表达式的机会不多,不过,要想成为一名系统管理员,正则表达式则是不可不学的。原因是,在于,系统每天产生的的信息会多到你无法想像。

     由于系统的数据量太大,要系统管理员每天去看这么多信息,真的很不现实,从千百行中找出有问题的行进行处理,才是明智的做法,这个时候,就不得不用到正则表达式了。如此一来,管理员的工作将会很轻松了,当然正则表达式的用处还不至于此,深入了解后,你会爱上它的。

 

正则表达式分为两种,一种是基础的正则表达式,一种是扩展的正则表达式。

下面我们就介绍这两种正则表达式。

 

一:基础的正则表达式。

     正则表达式是处理字符串的标准方式,它需要有支持的工具程序来辅助,所以,这里先介绍一个简单的命令grep。在介绍完后,再讲讲表达式的字符串处理能力。

 

先了解一下grep的语法。

grep [-acinv]  '搜索字符串'  filename

参数说明:

-a :在二进制文件中,以文本方式搜索数据。

-c :计算找到‘搜索字符串’的次数。

-i  :忽略大小写的不同,所以大小写视为相同。

-n :输出行号。

-v :反向选择,即显示出没有 ‘搜索字符串’的那些行显示出来。

 

#grep -v  'root' /var/log/secure

将/var/log/secure下的没有root的那些行显示出来

 

#grep  'root' /var/log/secure

将/var/log/secure下有root的那些行显示出来

 

下面来结合grep讲讲正则表达式。

 

grep是很常用的命令,它最重要的功能就是进行字符串的比较,然后将符合用户需要的字符串打印出来。grep在数据中查找一个字符串时是以“行”为单位进行数据的选取的。只有满足条件的行才被显示出来,不满足的就不会显示出来 。

1。搜索特定字符串

 

 

#grep -n  'the' myfile.txt

在myfile.txt 中查找 the 单词,并显示出是第几行。

 

#grep -vn  'the'  myfile.txt

在myfile.txt中查找 the 单词,显示出没有the 的行,并显示出是第几行

 

#grep -in  'the' myfile.txt

不考虑the的大小写,大写和小写都是同等的,并显示出有the的行,打印出是第几行

 

 

2.利用[ ]来搜索集合字符

如果要搜索test和taste这两个单词时,可以发现,它们有共同的部分,就是‘t?st’,这个时候,我们可以这样搜索

 

#grep -n  't[ae]st'  myfile.txt

其实,,[ ]里论有几个字符,都只代表一个字符,所以,上面的例子说明了我们只需要tast或test 两个字符串

如果想要搜索有aa的字符,可以用下面方法
#grep -n 'aa' myfile.txt

但是如果不想aa前面有c,可以用集合字符的反向选择[^]来实现:
#grep -n '[^c]aa' myfile.txt

当然[]里面还可以连写,如abc前面只能出现小写字母。
#grep -n '[a-z]abc' myfile.txt

3.行首与行尾字符 ^ $

#grep -n '^the' myfile.txt
查询一行字符串里有the,让the只出现在行首

#grep -n  'the$' myfile.txt
查询一行字符串里有the,让the只出现在行尾

还有一点就是空白行怎么表示?
如果想找出哪一行是空白行,怎么找?如下
grep -n '^$' myfile.txt
刚出现就结束了,所以,空白行这样表示: ^$

4.任意一个字符(.)与重复字符(*)

 . 表示拥有一个字符
假设找出开头是g,结尾是d,共有5个字符,如下
#grep -n 'g...d' myfile.txt

 * 表示重复0个或多个前面的字符。
#grep -n 'go*' myfile.txt
表示o 可有可无,但g必须要有。go,goo,gd都满足此条件
记住,* 重复前面的字符,0次或多次。

有一点注意了。. 表示一个字符,*表示0个或多个字符,所有, .* 表示0个或多个任意字符。

 

5.限定连续重复的范围 {}

如果想限制一个范围内的重复字符数,可以用{} ,但是 {} 和 } 的符号在shell中有特殊的意义,
因此必须要使用转义字符 / 让它推动特殊意义。
 
{} 的语法如下:
#grep -n 'a/{2/}' myfile.txt
找到两个连续的a的字符串

#grep -n 'ga/{2,5/}g' myfile.txt
找到以g开头,以一结尾,中间有2到5个a的字符串

#grep -n 'ga/{2/}g' myfile.txt
找到以g开头,以g结尾,中间有2个以上的a的字符串

综上所述,可以总结出以下的重要特殊字符。


^     行首
$      行尾
.        一个字符
/       转义字符
*     重复前面的0个或多个字符
/{n,m/}   重复前面一个字符n到m次
/{n,/}     重复前面一个字符到少n次
/{n/}      重复前面一个字符n次
[]           指定范围内的一个
[^]         反向选择指定范围内的一个


二。扩展正则表达式。
事实上,一般用户只需了解基础正则表达式就足够了,不过,有时为了简化整个命令操作
,了解使用范围更广的扩展正则表达式会更方便

使用支持扩展开支正则表达式的egrep与特殊字符 | 来分隔两组字符串,会方便很多。
这里必须特别强调,grep支持基础正则表达式,而 egrep支持扩展正则表达式,熟悉了
基础正则表达式后,扩展的正则表达式只是多了几个重要的特殊的符号。如下

+ 重复一个或一个以上的字符
? 0个或一个字符
| 用或(or)的方式找出数个字符串
() 找出用户组的字符串

这就是扩展正则表达式的特殊字符。


在了解一些正则表达式后,再了解sed和awk两个工具,它们相当有用,此作为后续课程介绍。今天就说到这吧
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux,正则表达式,扩展,工具,go,shell,工作)