目录
前言
- 在 Linux/UNIX 系统中包含很多种文本处理器或文本编辑器,其中包括我们之前学习过的VIM 编辑器与 grep 等
- grep,sed,awk 更是 shell 编程中经常用到的文本处理工具,被称之为 Shell 编程三剑客
一、正则表达式
1、概述
是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。正则表达式是由普通字符与元字符组成的文字模式。
2、正则表达式组成
普通字符:包括大小写字母、数字、标点符号及一些其他符号
元字符:指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式
3、用途
正在表达式对于系统管理员来说是非常重要的,系统运行过程中会产生大量的信息,这些信息有些事非常重要的,有些则只是告知的信息,身为系统管理员如果直接看这么多的信息数据,无法快速定位到重要的信息,如“用户登录失败”等信息,这是可以通过正则表达式快速提取有问题的信息,如此一来,可以将运维工作变得更佳简单、方便。
4、分类
基础正则表达式:BRE
扩展正则表达式: ERE
二、基础正则表达式元字符
1、特殊字符
\:转义符,将特殊字符进行转义,忽略其特殊意义a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义\\\\
^:匹配行首,^则是匹配字符串的开始^tux匹配以tux开头的行^^^^
$:匹配行尾,$则是匹配字符串的结尾tux$匹配以tux结尾的行$$$$
.:匹配除换行符\n之外的任意单个字符,awk则中可以ab.匹配abc或bad,不可匹配abcd或abde,只能匹配单字符....
[list]:匹配list列表中的一个字符 例: go[ola]d,[abc]、[a-z]、[a-z0-9]
[^list]:匹配任意不在list列表中的一个字符 例: [^a-z]、[^0-9]、[^A-Z0-9]
*:匹配前面子表达式0次或者多次 例:goo*d、go.*d
\{n\} :匹配前面的子表达式n次,例:go\{2\}d、'[O-9]\{2\}'匹配两位数字
\{n,\}:匹配前面的子表达式不少于n次,例: go\{2,\}d、' [0-9]\{2,\}'匹配两位及两位以上数宁
\{n,m\}﹔匹配前面的子表达式n到m次,例: go\{2,3\)d、'[0-9]\{2,3\}'匹配两位到三位数字
2、定位符
^ 匹配输入字符串开始的位置
$ 匹配输入字符串结尾的位置
3、非打印字符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符
三、扩展正则表达式
+:重复一个或者一个以上的前一个字符
egrep -n 'wo+d' test.txt
查询"wood" "woood" "woooooood"等字符串
?:零个或者一个的前一个字符
egrep -n 'bes?t' test.txt
查询“bet”“best”这两个字符串
|:使用或者(or)的方式找出多个字符
egrep -n 'of|is|on' test.txt
查询"of"或者"if"或者"on"字符串
():查找“组”字符串
egrep -n 't(a|e)st' test.txt
查询"tast"或者"test"字符串
()+: 辨别多个重复的组
egrep -n 'A(xyz)+C' test.txt
查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串
四、grep
参数
-c :只输出匹配行的计数。
-i :不区分大 小写(只适用于单字符)。
-h :查询多文件时不显示文件名。
-l :查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s :不显示不存在或无匹配文本的错误信息。
-v :排除,不显示过滤的字符串的行;显示不包含匹配文本的所有行。
-E :过滤多个字符串。
-o :输出精确匹配的字符而不是默认的整行。
1、查找特定字符
查找出特定字符“the”所在位置
grep -n 'the' test.txt
2、利用中括号“[]”来查找集合字符
查找“shirt”与“short”这两个字符串
grep -n 'sh[io]rt' test.txt
查找包含数字的行
grep -n '[0-9]' test.txt
3、查找行首“^”与行尾字符“$”
查询以“the”字符串为行首的行
[root@localhost ~]# grep -n '^the' test.txt
4:the tongue is boneless but it breaks bones.12!
查询不以字母开头的行
[root@localhost ~]# grep -n '^[^a-zA-Z]' test.txt
11:#woood # 12:#woooooood #
查询空白行
[root@localhost ~]# grep -n '^$' test.txt
10:
4、查找任意一个字符“.”与重复字符“*”
查找“w??d”的字符串
[root@localhost ~]# grep -n 'w..d' test.txt
5:google is the best tools for search keyword.
8:a wood cross!
9:Actions speak louder than words
查询包含至少两个 o 以上的字符串
[root@localhost ~]# grep -n 'ooo*' test.txt
3:The home of Football on BBC Sport online. 5:google is the best tools for search keyword. 8:a wood cross!
11:#woood # 12:#woooooood #
14:I bet this place is really spooky late at night!
5、查找连续字符范围“{}”
查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串。
[root@localhost ~]# grep -n 'wo\{2,5\}d' test.txt
8:a wood cross! 11:#woood #
五、文本处理器
1、sed
1.1 概述
sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作ÿ