第十二章 正则表达式与文件格式化处理【鸟哥linux私房菜学习笔记】

一、什么是正则表达式

处理字符串的方法,以行为单位处理字符串,通过一些特殊符号的辅助,帮助使用者实现“寻找/替代/删除”的功能

二、基础正则表达式

(一)语系对正则表达式的影响

(二)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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值