一、什么是正则表达式
处理字符串的方法,以行为单位处理字符串,通过一些特殊符号的辅助,帮助使用者实现“寻找/替代/删除”的功能
二、基础正则表达式(一)语系对正则表达式的影响
(二)grep的一些高级参数
(三)基础正则表达式练习
例题一:查找特定字符串
例题二:利用中括号 [ ]来查找集合字符
这部分需要反复的练习,加深印象,无特别需要注意的地方,请看鸟哥链接
http://linux.vbird.org/linux_basic/0330regularex.php#basicre
例题三:行首与行尾 ^ $
/etc/rsyslog.conf里面有有很多空白行和以“#”开头的,我只想查看其正文部分,操作如下:
有一个需要注意的问题:管道前段,添加需要要慎重。
管道前段命令中加了-n,这时候后半段grep命令收到的数据是以序号开头的,所以当再次尽心字符串筛选,想去除“#”开头的数据时,不存在这样的数据啦,所有数据都是以数字开头的。
如图所示,第一列序号是连续的,为第二个grep命令中添加,第二列序号是间断的,是第一个grep筛选后的结果。
例题四:任意一个字符.与重复字符*
小数点".":代表存在任意字符
重复字符“*”:重复前一个字符,0或者无限多次。
例题五:限定连续RE字符范围{ }
(四)基础正则表达式字符
汇总:
RE 字符 | 意义与范例 |
^word | 意义:待搜寻的字串(word)在行首! 范例:搜寻行首为#开始的那一行,并列出行号 grep -n '^#' regular_express.txt |
word$ | 意义:待搜寻的字串(word)在行尾! 范例:将行尾为!的那一行列印出来,并列出行号 grep -n '!$' regular_express.txt |
. | 意义:代表『一定有一个任意字元』的字符! 范例:搜寻的字串可以是(eve) (eae) (eee) (ee),但不能仅有(ee) !亦即e与e中间『一定』仅有一个字元,而空白字元也是字元! grep -n 'ee' regular_express.txt |
\ | 意义:跳脱字符,将特殊符号的特殊意义去除! 范例:搜寻含有单引号'的那一行! grep -n \' regular_express.txt |
* | 意义:重复零个到无穷多个的前一个RE字符 范例:找出含有(es) (ess) (esss)等等的字串,注意,因为*可以是0个,所以es也是符合带搜寻字串。另外,因为*为重复『前一个RE字符』的符号,因此,在*之前必须要紧接着一个RE字符喔!例如任意字元则为『.*』 ! grep -n 'ess*' regular_express.txt |
[list] | 意义:字元集合的RE字符,里面列出想要撷取的字元! 范例:搜寻含有(gl)或(gd)的那一行,需要特别留意的是,在[]当中『谨代表一个待搜寻的字元』,例如『 a[afl]y 』代表搜寻的字串可以是aay, afy, aly即[afl]代表a或f或l的意思! grep -n 'g[ld]' regular_express.txt |
[n1-n2] | 意义:字元集合的RE字符,里面列出想要撷取的字元范围! 范例:搜寻含有任意数字的那一行!需特别留意,在字元集合[]中的减号-是有特殊意义的,他代表两个字元之间的所有连续字元!但这个连续与否与ASCII编码有关,因此,你的编码需要设定正确(在bash当中,需要确定LANG与LANGUAGE的变数是否正确!)例如所有大写字元则为[AZ] grep -n '[AZ]' regular_express.txt |
[^list] | 意义:字元集合的RE字符,里面列出不要的字串或范围! 范例:搜寻的字串可以是(oog) (ood)但不能是(oot) ,那个^在[]内时,代表的意义是『反向选择』的意思。例如,我不要大写字元,则为[^AZ]。但是,需要特别注意的是,如果以grep -n [^AZ] regular_express.txt来搜寻,却发现该档案内的所有行都被列出,为什么?因为这个[^AZ]是『非大写字元』的意思,因为每一行均有非大写字元,例如第一行的"Open Source"就有p,e,n,o....等等的小写字 grep -n 'oo[^t]' regular_express.txt |
\{n,m\} | 意义:连续n到m个的『前一个RE字符』 意义:若为\{n\}则是连续n个的前一个RE字符, 意义:若是\{n,\}则是连续n个以上的前一个R |