引言:
正则表达式,又称规则表达式。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,正则表达式不只有一种,而且 Linux 中不同的程序可能会使用不同的正则表达式。
一.正则表达式定义
正则表达式,又称正规表达式、常规表达式,使用字符串来描述、匹配一些列符合某个规则的字符串
正则表达式是由普通字符与元字符组成
普通字符包括大小写字母、数字、标点符号及一些其他符号
元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式
Linux 中常用的有两种正则表达式引擎
基础正则表达式:BRE
扩展正则表达式: ERE
二.正则表达式元字符
2.1基础正则表达式元字符
基础正则表达式常见元字符如下:
元字符 作用
\ 转义字符,用于取消特殊符号的含义
^ 匹配字符串开始的位置
$ 匹配字符串结束的位置
^$ 匹配空行
. 匹配除\n之外的任何一个字符
* 匹配前面子表达式0次或多次
[list] 匹配list列表中的一个字符
[^list] 匹配任意非列表中的一个字符
{n} 匹配前面子表达式不少于n次
{n,m} 匹配前面子表达式n到m次
注:egrep、awk使用{}匹配时不用加\转义
1.\!,\n,\$等
2.^a以a开头; ^#以#开头 ;^[a-z]以字母a-z开头
3.word$ 以word结尾
4.go.d 匹配一个字符,good,goad,gozd ; go…d ;匹配两个字符,goabd,goefd
5.go*d 匹配0个o或者多个,比如:gd、god、good、goood
6.go.*d 匹配go+多个任意字符+d
7.go{2,4}匹配gd中间有2-4个o,grep使用{}要用转义符
扩展正则表达式 egrep
通常情况下会使用基础正则表达式就已经足够了,但有时为了简化整个指令,需要使用范围更广的扩展正则表达式
例如,使用基础正则表达式查询除文件中空白行与行首为 “#” 之外的行(通常用于查看生效的配置文件),执行"grep -v’^KaTeX parse error: Expected group after '^' at position 21: ….txt | grep -v'^̲#'"即可实现。这里需要使用管…|^#'test.txt",其中,单引号内的管道符号表示或者(or)
egrep 命令与 grep 命令的用法基本相似。egrep 命令是一个搜索文件获得模式,使用该命令可以搜索文件中的任意字符串和符号,也可以搜索一个或多个文件的字符串,一个提示符可以是单个字符、一个字符串、一个字或一个句子。
扩展正则表达式元子符如下:
元字符 | 作用 |
---|---|
+ | 匹配前面子表达式一次以上 |
? | 匹配前面子表达式0次或一次 |
() | 将括号内的字符作为一个整体 |
丨 | 以或的方式怕匹配字符条串 |
1.go+d 匹配至少一个o,比如god、good、gooood等
2.go?d, 匹配0次或1次o,比如:gd 或god
3.g(oo)+d, 将括号内的看做一个整体,比如:good、goood、gooooood
4.g(00|gg)d,匹配good或者gggd
grep使用扩展正则表达式元字符时必须加转义符""
egrep使用扩展正则表达式元字符时则不用加转义符
列截取工具–cut
显示行中的指定部分,删除文件中指定字段
格式:cut 选项 参数
常用选项:
选项 | 说明 |
---|---|
-b | 按字节截取 |
-c | 按字符截取 |
-d | 指定以什么分割符截取,默认为制表符 |
-f | 通常和-d一起使用 |
cut只擅长于处理单个字符为间隔的文本,-b只能分割字母,-c既可以分割字母也可以分割中文
排序工具–sort
sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。
命令格式:sort [选项] 参数
常用选项:
选项 说明
-t 指定分隔符,默认使用Tab或空格分割
-k 指定排序区域
-n 按照数字进行排序,默认以文字排序
-u 等同于uniq,相同数据仅显示一行 ,若行尾有空格则不成功
-r 反向排序,默认是升序,-r反序
-o 将排序后的结果转存至指定文件
1.不加任何参数,默认以第一列的字符升序
2.按数字升序排序
3.反向排序,并显示前10行
去重工具–uniq
uniq 命令用于检查及删除文本文件中连续重复出现的行列
命令格式:uniq [选项] 参数
选项 | 说明 |
---|---|
-c | 对重复的行进行统计 |
-d | 仅显示重复行 |
-u | 仅显示出现一次的行 |
1.uniq -c 只统计连续重复的行
2.uniq -d 与uniq -u
3.uniq一般与sort命令一起使用
修改工具–tr
tr可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符
命令格式: tr [选项] 字符集1 字符集2
常用选项:
选项 | 说明 |
---|---|
-d | 删除字符 |
-s | 删除所有重复出现的字符,只保留第一个 |
1.替换,当字符集1 与字符集2一一对应时
2.当字符集1 与字符集2不对应时
当字符没有一一对应时,字符集1剩余的字符,对应字符集2最后的一个字符
当字符集1中出现重复字符时,默认匹配后一个字符所对应的字符集2的字符
删除 -d
4.去重-s,只有连续出现的才去重
文本工具组合
在实际使用中,我们经常将多个文本工具,组合使用达到我们的目的
1.查看登录用户和ip
2.查看登录过系统的用户
last 查看登录历史记录
cut -d " " -f1 以空格为分隔符截取第一列
sort -u 排序并过滤重复的
grep -v "^$\|wtmp" 过滤空行和wtmp
wtmp 位于/var/log/wtmp 用于存放登录历史记录的文件
3.查看登录ip和使用者个数
4.查看客户端和监听服务个数
总结
1.用grep使用扩展正则表达式元字符的时候,必须加转义符“\”
2.用egrep使用正则表达式元字符时,不需要加转义符“、”
3.tr命令:当字符没有一一对应时,字符集1剩余的字符,对应字符集2最后的一个字符
当字符集1中出现重复字符时,默认匹配后一个字符所对应的字符集2的字符