Shell脚本之正则表达式

网友投稿 269 2022-11-02

Shell脚本之正则表达式

前言

Linux命令中,可以使用通配符替代或者识别某一些文件名,通常用于模糊查询的场景,正则表达式与通配符类似,但是匹配的准确度比通配符更高

1.正则表达式定义

正则表达式组成:普通字符:大小写字母、数字、标点符号及一些其他符号

元字符:在正在表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式

(表达式层次)正则表达式:基础正则表达式、扩展正则表达式

文件处理器:sed 、awk、sort、uniq、tr

linux中文本处理工具:grep egrep sed awk

1.1基础正则表达式常见元字符

(支持的工具: grep、egrep、sed、 awk)

\   转义字符,用于取消特殊符号的含义,例: \!、\n、\$等^   匹配字符串开始的位置 例:^a ^the$    匹配字符串结束的位置,例: word$、^$匹配空行.       匹配除\n之外的任意的一个字符,例: go.d、g..d*      匹配前面子表达式0次或者多次,例: goo*d、 go.*d[list]   匹配list列表中的一个字符,例: go[ola]d,[abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字[^list]   匹配任意非list列表中的一个字符,取反,例:[^0-9]、[^A-Z0-9]、[^a-z]匹配任意一位非小写字母\{n\}    匹配前面的子表达式n次,例: go\{2\}d、'[0-9]\{2\}'匹配两位数字\{n,\}    匹配前面的子表达式不少于n次\{n,m\}   匹配前面的子表达式n到m次

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

1.2扩展正则表达式

? 匹配前面子表达式0次或者1次,即:可有可无+  与星号相似,表示其前面字符出现一次或多次,但必须出现一次,>=1|   用逻辑OR(或)方式指定正则表达式要是用的模式()  符串分组,将括号中的字符串作为一个整体。

1.3grep命令

grep [选项]..查找条件目标文件-E :开启扩展(Extend) 的正则表达式-c:计算找到'搜寻字符串'的次数-i :忽略大小写的不同,所以大小写视为相同-o:只显示被模式匹配到的字符串-v :反向选择,亦即显示出没有'搜寻字符串,内容的那一行! (反向查找,输出与查找条件不相符的行--color=auto:可以将找到的关键词部分加上颜色的显示喔!-n :顺便输出行号

例1grep 命令

查找root/etc/passwd/的行数

例2 查找ip

要加 \.转义符,不然+会有特殊含义

例3 显示有字符的行数

查找sh开头,rt结尾中间i或o的行数

查找两个o及以上的行数

例4 过滤取反和开头的行数

过滤不以a-z开头两个o及以上结尾

过滤不以A-Z开头两个o及以上结尾

过滤以the开头的行数

过滤以a-z开头的行数

过滤以A-Z开头的行数

过滤不以a-z和A-Z开头的行数

过滤以任意字符,$结尾的行数

显示空行的行数

过滤以w开头,d结尾的行数

*重复字符

2.常见的管道命令

2.1cut

cut:列截取工具 ,显示行中的指定部分,删除文件中指定字段

-b:按字节截取

-c:按字符截取

-d:指定以什么为分隔符截取,默认为制表符

-f:通常和-d一起

例1 截取字符

第一种方法:截取etc/passwd下以:为分隔符的第7列

第二种方法打印

查看当前登录的用户

截取第一列的字符(常用于中文)

截取文本里第2个字符

注意 :cut只擅长处理单个字符为间隔的文本。

2.2 sort

sort:是一个以行为单位对文件内容进行排序的工具,可以根据不同的数据类型来排序,例如数据和字符的排序方法不一样

sort [选项] 参数

常用选项

-t:指定分隔符,默认使用【Tab】键或空格分离-k:指定排序区域,哪个区间排序-n:按照数字进行排序 ,默认是以文字形式排序-u:等同于uniq,表示相同的数据仅显示一行-r:反向排序,默认升序-o:将排序后的结果转存至指定文件

例1升序和降序

不加任何参数,按第一列以字母顺序升序

去除重复的

2.3uniq

主要用于去除连续的重复行

注意:主要是连续的行,所以通常和sort结合使用先排序变成连续的行再执行去操作

【常用选项】

-c:对重复的行进行计数

-d:仅显示重复行

-u:仅显示出现一次的行

例:统计重复与不重复

统计重复行的次数,不连续的重复行不算做重复行

awk输出第一列

2.3 tr工具

tr命令常用来对来自标准输入的字符进行替换、压缩和删除

tr具体的命令语法格式为:tr [选项] [参数]

【常用参数】

-c:取代所有不属于第一字符集的字符;-d:删除所有属于第一字符集的字符;-s:把连续重复的字符以单独一个字符表示;-t:先删除第一字符集较第二字符集多出的字符,做替换

例:替换各种字符

总结:

正则表达式符号和含义较多,分为基础和扩展两类,使用扩展要加转义符,否则会有特殊含义。cut和sort和tr功能各有不同

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring源码完美导入IDEA的过程
下一篇:单片机通信接口的物理结构和固件特性分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~