一、正则表达式的好处
简单的符号结合达到对文本的多重过滤
灵活性、逻辑性和功能性非常的强
每一项功能单列出来较为简单,但组合时往往难以表达并找清逻辑
二、使用时,连线解决,一环套一环
三、奇葩组合
.* 表示任意长度任意字符。
^$ 空行 ^[[:space:]] 空白行
四、操作分析
1、显示CentOS7上所有系统用户的用户名和UID
a.显示系统用户的话,用uid在0-999之间,为了避免其他信息干扰,先将/etc/passwd中用户名和UID取出。
b.筛选出uid仅有0-999数字的行(避免有用户名是数字1-999之间的)
c.uid仅有0-999数字的行有两种表示方法
2、添加用户bash、testbash、basher、sh、nologin(其shell 为/sbin/nologin),找出/etc/passwd用户名同shell名的行
a.新建用户
b.以字符串"string"开头,且以"/string"结尾的行,必须要用引用。引用string时要在string外加(),否则引用\1时,系统不能识别引用的字符串。
3.找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
a.单词包括下划线开头: ^[[:alpha:]|_]\+
4.使用egrep取出/etc/rc.d/init.d/functions中其基名
a.基名是路径的最后一个单词
b.取出一行中的一部分,并不是取出一整行,需要用 grep -o
5、使用egrep取出/etc/rc.d/init.d/functions路径的目录名
a.目录名是路径最后一个单词之前的;
b.从 开头的 / 到 最后一个 /。
6、统计last命令中以root登录的每个主机IP地址登录次数
7、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255。
a.创建一个文件digit作为实验。
b.0-9
c.10-99
d.100-199
e.200-249
f.250-255
8、显示ifconfig命令结果中所有IPv4地址
a.ip地址的行有关键词broadcast
b.cut截取 ip地址
9、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
a. 如果要对这句话中的字符操作,需要把字符单列出来成一行;因为uniq和sort都是对行进行操作的。
b.暂时只能采用 grep的-o 选项(单独只显示匹配到的信息,并不显示整行)的 特有功能。
c.排序、去重。
五、使用总结:
1.尽量在外面加上双引号 ""。
2.忘了该不该加 \ 时,就全加上。
3.使用时,先不加 \ ,以免影响判断;想好逻辑之后再加上 \ ,测试结果。
4.正则表达式属于模糊查找,会将只要含有关键字的行都列出来,用\<keyword\> 限定关键字范围可以避免。
5.必须明确表达出引用、分界、开头、结尾;否则就会多了好多你不想要的结果。