Shell编程之正则表达式与文本处理器

一、基础正则表达式

基础正则表达式常见元字符
支持的工具: grep、egrep、sed、awk

\
转义字符,用于取消特殊符号的的含义

例:!,\n,$等

^
匹配字符串开始的位置

例:a,the,#,[a-z]

$
匹配字符串结束的位置

例:wordKaTeX parse error: Expected group after '^' at position 2: ,^̲匹配空行

.
匹配除\n之外的任何一个字符

例:go.d , g…d

匹配前面子表达式0次或者多次

例:goo*d,go.*d

[list]
匹配list列表中的一个字符

例:go[loa]d,[a-z],[0-9]匹配任意一位数字

[^list]
匹配任意非list列表中的一个字符

例:[^0-9],[^a-z]匹配任意一位非小写字母`

{n}
匹配前面子表达式n次

例:go{2}d,'[0-9]{2}'匹配两位数字

{n,}
匹配前面子表达式不少于n次

例:go{2,}d,'[0-9]{2,}'匹配两位及两位以上的数字

{n,m}
匹配前面子表达式n到m次

例:go{2,3}d,'[0-9]{2,3}'匹配两位到三位数字

注:egrep,awk使用{n}、{n,}、{n,m} 匹配时“{}”前面不用加“\”

元字符作用
\转义字符,用于取消特殊符号的的含义 例:!,\n,$等
^匹配字符串开始的位置
$匹配字符串结束的位置 ^$匹配空行
.匹配除换行符\r\n之外的任意单个字符
[list]匹配list列表中的一个字符 例: go[ola]d,[abc]、[a-z]、[a-z0-9]
[^list]匹配任意不在list列表中的一个字符
*匹配前面子表达式0次或者多次 例:goo*d、go.*d
{n}匹配前面的子表达式n次,例:go{2}d、'[0-9]{2}'匹配两位数字
{n,}匹配前面的子表达式不少于n次,例: go{2,}d、’ [0-9]{2,}'匹配两位及两位以上数字
{n,m}匹配前面的子表达式n到m次,例: go{2,3)d、'[0-9]{2,3}'匹配两位到三位数字

注: egrep、awk使用{n}、{n, }、{n, m}匹配时“{}“前不用加”\”

扩展正则表达式元字符

+	作用:重复一个或者一个以上的前一个字符
示例:执行“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”因为这两个单词的“t”与“st”是重复的,所以将“a”与“e”
列于“()”符号当中,并以“|”分隔,即可查询"tast"或者"test"字符串

()+	作用:辨别多个重复的组
示例:“egrep -n 'A(xyz)+C' test.txt”。该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思

非打印字符

\n匹配一个换行符

\r匹配一个回车符

\t匹配一个制表符(TAB)

二、grep命令

格式:grep [options] pattern [file]
 
option表示选项,pattern表示匹配的模式。file表示一系列文件名。
 
常用选项:
 
-c  只打印匹配的文本行的次数,不显示文本内容。
 
-i   匹配时忽略字母大小写
 
-h  当搜索多个文件,不显示匹配文件名前缀。
 
-l   只列出含义匹配的文本行的文件的文件名,不显示其具体匹配的内容。
 
-n  列出所有匹配的文本行,并显示行号
 
-s   不显示关于不存在或无法读取文件的错误信息
 
-v   只显示不匹配的文本行,反向选择,显示与搜索字符串不相符的行。
 
-w  匹配整个单词
 
-x   匹配整个文本行
 
-r   递归搜索,不仅搜索当前目录,还有各级子目录
 
-E   开启扩展(extend)的正则表达式
 
--color=auto 可以将找到的关键词部分加上颜色的显示

1.统计root字符总行数
在这里插入图片描述
2.不区分大小写
在这里插入图片描述
3.取反.显示没有was的行
在这里插入图片描述
4.显示非空行
在这里插入图片描述

元字符操作案例

1.查找特定字符
-n 列出所有匹配的文本行,并显示行号
在这里插入图片描述
2.利用中括号“[]”来查找集合字符
[ ]中无论有几个字符, 都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.查找行首“^”与行尾字符“$”
在这里插入图片描述
在这里插入图片描述
4.查找任意一个字符“.”与重复字符“*”
在这里插入图片描述

“o”表示拥有零个(即为空字符)或大于等于一个“o”的字符,因为允许空字符,所以执行“grep -n 'o’ test.txt”命令会将文本中所有的内容都输出打印。如果是“oo*”,则第一个 o 必须存在, 第二个 o 则是零个或多个 o,所以凡是包含 o、oo、ooo、ooo,等的资料都符合标准。同理,若查询包含至少两个 o 以上的字符串,则执行“grep -n ‘ooo*’ test.txt”命令即可。**
在这里插入图片描述
grep -n ‘wod’ 1.txt 匹配w中任意o
grep -n 'wo
d’ 1.txt 匹配w后面字符
在这里插入图片描述
匹配有任意数字的行
在这里插入图片描述
5.查找连续字符范围“{}”
在上面的示例中,使用了“.”与“*”来设定零个到无限多个重复的字符,如果想要限制一个范围内的重复的字符串该如何实现呢?例如,查找三到五个 o 的连续字符,这个时候就需要使用基础正则表达式中的限定范围的字符“{}”。因为“{}”在 Shell 中具有特殊意义,所以在使用“{}”字符时,需要利用转义字符“\”,将“{}”字符转换成普通字符。“{}”字符的使用方法如下所示。
在这里插入图片描述
查询中间包含 2~5 个 o 的字符串
在这里插入图片描述

三、cut、sort、uniq、tr

1.cut:列截取工具

使用说明:cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一

选项:
 
-b:按字节截取
 
-c:按字符截取,常用于中文
 
-d:指定以什么为分隔符截取,默认为制表符
 
-f:通常和-d一起,指定要提取的字段(列)

以:分割打印passwd第一列还有第三列
在这里插入图片描述
在这里插入图片描述
切割后只显示指定位数的字符
在这里插入图片描述
注意:

cut只擅长于处理单个字符为间隔的文本,-b只能分割字母,-c既可以分割字母也可以分割中文

2.sort:排序工具

sort [选项] 参数
 
常用选项
 
-t:指定分隔符,默认使用[Tab]吧 键或空格分隔
 
-k:指定排序区域,哪个区间排序
 
-n:按照数字进行排序,默认是以文字形式排序
 
-u:等同于 uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功
 
-r:反向排序,默认是升序,-r就是降序
 
-o:将排序后的结果转存至指定文件
 
-f: 忽略大小写,会将小写的字母都转换为大写字母来进行比较
 
-b: 忽略每行前面的空格

1.不加任何选项默认按第一列升序,字母的话就是从a到z由上而下显示 在这里插入图片描述
按照 /etc/passwd 文件中每个用户记录的第 3 个字段(即 UID)进行排序。
-n 以数字进行排序
-t: 以:切割
-k 3 以第三个字段进行比较

在这里插入图片描述
-r 反向排序
在这里插入图片描述
-o 将结果传输进指定文件中
在这里插入图片描述
-u 去重
在这里插入图片描述

3.uniq:去重工具

主要用于去除连续的重复行
注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重

uniq [选项] 参数
 
-c:对重复的行进行计数;
 
-d:仅显示重复行;
 
-u:仅显示出现一次的行

统计重复行的次数,不连续的重复行他不算做重复行
在这里插入图片描述

-d 过滤出重复行

-u 过滤出不重复的行
在这里插入图片描述
去重(sort -u 也可以去重)
在这里插入图片描述
实例:查看登陆过系统的用户
在这里插入图片描述

4.tr:修改工具

它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符

用法:tr [选项]… SET1 [SET2]
 
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
 
常用选项
 
-d 删除字符
 
-s 删除所有重复出现的字符,只保留第一个

将所有小写改成大写
在这里插入图片描述
替换是一一对应的字母的替换
在这里插入图片描述
当字符数量不对等时,相同字符只识别后一个,剩下未对应的全是最后替换字符
在这里插入图片描述
在这里插入图片描述

可以用sed命令进行替换
在这里插入图片描述
对于单引号’ ,要用双引号才能引用
在这里插入图片描述
-d 删除字符
在这里插入图片描述
删除a’
在这里插入图片描述
删除换行
在这里插入图片描述
去除空行
在这里插入图片描述

实例:
在这里插入图片描述

拆解过程:
在这里插入图片描述

在这里插入图片描述

  • 29
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值