Linux运维实例 shell脚本中运用正则表达式来精确匹配

前言

正则表达式是通过一些特殊字符的排序,用以删除、查找、替换一行或者多行文字字符串的程序

一、正则表达式的命令格式

sort命令

以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序
常用格式为:
sort [选项] 参数
也可以结合命令来使用
cat file | sort 选项
常用选项
-f 忽略大小写,默认会将大写字母排在前面
-b 忽略每行前面的空格
-n 按照数字排序
-r 反向排序
-u 等同于uniq,表示相同的数据仅显示一行
-t 指定字段分隔符,默认使用[tab]键分隔
-k 指定排序字段
-o <输出文件>:将排序后的结果转存至指定文件
在这里插入图片描述
结合cat对文件按照数字排序
在这里插入图片描述
对passwd文件中的2字段按顺序进行排序。通过:分隔符来匹配

unip命令

用于报告或者忽略文件中的连续的重复行,常与sort一起用
格式
unip [选项] 参数
cat file | unip 选项
常用选项有
-c 计数 并删除文件中重复出现的行
-d 仅显示连续的重复行
-u 仅显示出现一次的行
在这里插入图片描述
结合sort来对文件按数字排序并进行计数和删除重复出现的行

tr命令

用于来对来自标准输入的字符进行替换 压缩和删除
格式
tr [选项] [参数]
常用选项有:
-c 保留字符集1的字符,其他的字符(包括换行符\n)用字符集2替换
-d 删除所有属于字符集1的字符
-s 将重复出现的字符串压缩为一个字符串;用字符集2 替换 字符集1
-t 字符集2 替换 字符集1,不加选项同结果。
字符集1 指定要转换或删除的原字符集。当执行转换操作时,必须使用参数"字符集2"指定转换的目标字符集。但执行删除操作时,不需要参数"字符集2";
字符集2:指定要转换成的目标字符集。
在这里插入图片描述
字符集的替换 将第二个字符集替换成0 并且换行输出 保留第一个字符集
在这里插入图片描述
小写替换成大写
在这里插入图片描述
删除字符中的字符
在这里插入图片描述
删除字符中重复的字符
在这里插入图片描述
删除文本中的空行

cut

显示行中的指定部分,删除文件中指定字段
格式为
cut 选项 参数

常用选项
-f 通过指定哪一个字段进行提取。cut命令使用"TAB"作为默认的字段分隔符。
-d "TAB"是默认的分隔符,使用此选项可以更改为其他的分隔符。
–complement :此选项用于排除所指定的字符。
–ourput-delimiter :更改输出内容的分隔符。
在这里插入图片描述
匹配passwd文件的第一个字段
在这里插入图片描述
排除第2个字段

二、数组排序

利用正则表达式来进行数组排序
在这里插入图片描述

三 基础正则和拓展正则

基础正则表达式常见元字符 (支持的工具grep egrep sed awk)
\ 转义字符 用于取消特殊符号的含义,比如 ! \n $
^ 匹配字符串开始的位置 比如 ^a ^l
$ 匹配字符串结尾的位置 比如 aaooKaTeX parse error: Expected group after '^' at position 3: , ^̲匹配空行
.匹配除\n之外的任意的一个字符,例如 si.s t…o
:匹配前面子表达式0次或者多次,例如 sis job*s
[list] : 匹配list列表中的字符,例如[a-z] [0-9]
[^list] 匹配任意非list列表中的一个字符,例如 [^0-9] [^a-z0-0] [^a-z]
{n}:匹配前面的子表达式n次,例如 go{2,}d ‘[0-9]{2}’ 匹配两位数字
{n,} :匹配前面的子表达式不少于n次, mm{2,}d '[0-9]{2,}'匹配两位以及两位以上的数字
{n,m} :匹配前面的子表达式n到m次,例 go{2,3}d, '[0-9]{2,3}'匹配两位到三位数字

在这里插入图片描述
匹配列表 列表里面每个数字只可以被匹配一次。
拓展正则表达式元字符 (egrep awk)

  • :匹配前面子表达式1次以上,例 12+3,将匹配至少一个2 比如1223 12223 122223 等
    ?:匹配前面子表达式0次或者1次,例:12?3,将匹配13 123
    ()将括号中的字符串作为一个整体,例 1(123)+4 将匹配123整体一次,
    | :以或的方式匹配字符串,例 :1(12|34)5, 将匹配1125和1345
    在这里插入图片描述
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值