Shell脚本之正则表达式

引言:
正则表达式,又称规则表达式。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,正则表达式不只有一种,而且 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的字符
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值