栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Shell编程之正则表达式

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Shell编程之正则表达式

目录

一、正则表达式

1、正则表达式概述

1.1 Linux 中常用的有两种正则表达式引擎

2. 基础正则表达式

3. 扩展正则表达式

3.1 定位符

3.2 非打印字符

二. grep命令

1. 格式

2. 常用选项

3. 示例

3.1 统计包含某个字符的文本行的行数

3.2 不区分大小写查找the所有的行

3.3 将非空行写入到文件中

3.4 过滤IP地址

三. 元字符操作案例

1. 查找特定字符

2. 查找特定集合字符

2.1 查找在s和i之间有b的特殊字符

2.2 查找不是R开头的oo的行

2.3 查找不是大写和小写字母开头的oo行

2.4 查找包含数字的行

2.5 查找除大小写字母开头的行

2.6 查找是 . 结尾的行

3. 查找以w开头,以d结尾的行

4. 查找连续字符范围 “{}”

4.1 查找2个o的字符

4.2 查找两个字母之间包含多个字符串的行

四. 常用的管道命令

1. cut 

2. sort

3.uniq

4. tr


一、正则表达式

1、正则表达式概述
  • 通常用于判断语句中,用来检查某一字符串是否满足某一格式
  • 正则表达式是由普通字符与元字符组成
  • 普通字符包括大小写字母、数字、标点符号及一些其他符号
  • 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符面的字符)在目标对象中的出现模式

1.1 Linux 中常用的有两种正则表达式引擎
  • 基础正则表达式:BRE
  • 扩展正则表达式:ERE
文本处理工具基础正则表达式扩展正则表达式

vi编辑器

支持

grep支持

egrep支持支持
sed支持
awk支持支持

2. 基础正则表达式

基础正则表达式是常用的正则表达式部分

元字符作用
转义字符,用于取消特殊符号的含义,如:!,n
^匹配字符串开始的位置,如:^world匹配以world开头的行
$匹配字符串结束的位置,如:world$匹配以world结尾的行
.匹配除n(换行)之外的任意的1个字符
*匹配前面子表达式0次或者多次
[list]匹配list列表中的一个字符,如:[0-9]匹配任意一位数字
[^list]匹配任意不在list列表中的1个字符,如:[^0-9]匹配任意一位非数字字符

{n }

匹配前面的子表达式n次,如:[0-9]{2 }匹配两位数字
{n, }匹配前面的子表达式不少于n次,如:[0-9] {2, }表示两位及两位以上数字 
{n,m }匹配前面的子表达式n到m次,如:[a-z] {2,3 }匹配两到三位的小写字母

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

   egrep -E -n 'wo{2}d' test.txt   -E用于显示文件中符合条件的字符
   egrep -E -n 'wo{2,3}d' test.txt

3. 扩展正则表达式
  • 扩展正则表达式是对基础正则表达式的扩充和深化

  • 支持的工具有 egerp 和 awk

  • 扩展正则表达式元字符

元字符作用
+匹配前面子表达式1次以上,如: go+d,将匹配至少一个o
?匹配前面子表达式0次或者1次,如:go?d,将匹配gd或god
()将括号中的字符串作为一个整体,如:g(oo) +d,将匹配。整体1次以上,如good,gooood等
|以或的方式匹配字条串,如:good I great,将匹配good或者great

3.1 定位符
  • ^ 匹配输入字符串开始的位置
  • $匹配输入字符串结尾的位置

3.2 非打印字符
  • n匹配一个换行符
  • r匹配一个回车符
  • t匹配一个制表符

二. grep命令

grep命令使用正则表达式来搜索文本,并且把匹配的文本打印出来

1. 格式
grep [options] pattern [file]
 
option表示选项,pattern表示匹配的模式。file表示一系列文件名

2. 常用选项

选项

说明
-c只打印匹配的文本行的次数,不显示文本内容
-i匹配时忽略字母大小写
-h当搜索多个文件,不显示匹配文件名前缀
-l只列出含义匹配的文本行的文件的文件名,不显示其具体匹配的内容
-n列出所有匹配的文本行,并显示行号
-s不显示关于不存在或无法读取文件的错误信息
-v只显示不匹配的文本行,反向选择,显示与搜索字符串不相符的行
-w匹配整个单词
-x匹配整个文本行
-r递归搜索,不仅搜索当前目录,还有各级子目录
-E开启扩展(extend)的正则表达式

3. 示例

3.1 统计包含某个字符的文本行的行数

3.2 不区分大小写查找the所有的行

-i 匹配时忽略字母大小写

3.3 将非空行写入到文件中

3.4 过滤IP地址

egrep:是扩展正则表达式,不用加反斜杠

grep:是基础正则表达式,要加反斜杠(符号要转义) 

三. 元字符操作案例

1. 查找特定字符

查找出test文件中root的位置,其中“-n”表示显示行号、“-i”表示不区分大小写。命令执行后,符合匹配标准的字符, 字体颜色会变为红色

2. 查找特定集合字符

2.1 查找在s和i之间有b的特殊字符

2.2 查找不是R开头的oo的行

2.3 查找不是大写和小写字母开头的oo行

2.4 查找包含数字的行

2.5 查找除大小写字母开头的行
grep -n '^[^a-zA-Z]' passwd.txt

2.6 查找是 . 结尾的行
grep -n '.$' passwd.txt

3. 查找以w开头,以d结尾的行
grep -n 'w..d' passwd

4. 查找连续字符范围 “{}”

使用“{}”字符时,需要利用转义字符“”,将“{}”字符转换成普通字符

4.1 查找2个o的字符

4.2 查找两个字母之间包含多个字符串的行

四. 常用的管道命令

1. cut 
  • cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
  • 如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一
  • cut只擅长于处理单个字符为间隔的文本,-b只能分割字母,-c既可以分割字母也可以分割中文
参数

说明

-b按字节截取
-c按字符截取,常用于中文
-d指定以什么为分隔符截取,默认为制表符
-f通常和-d一起

1. 示例

1.1 查看passwd特定列

 1.2 查看当前登录用户的第三个字节

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

1.3 查看文件中的字符位置

查看文件中第二个字符

 

2. sort

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

格式:

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

1.1 按字母排序

不加任何选项默认按第一列升序,字母的话就是从a到z由上而下显示

1.2 按数字大小排序,以冒号作为分隔,给第3列排序

1.3 反向排序

1.4 将输结果不在屏幕上输出而是输出到指定文件

1.5 去掉文件中重复的行(-u等同于uniq)

3.uniq

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

格式:

uniq [选项] 参数
选项说明
-c对重复的行进行计数
-d仅显示重复行
-u仅显示出现一次的行
1. 示例

1.1 统计重复行的次数

 1.2 结合sort去重

 1.3 查看用户登录的数据

[root@xlj1 home]# who
root     pts/0        2022-05-28 08:51 (192.168.119.1)
root     pts/1        2022-05-28 10:24 (192.168.119.1)
##查看登录用户并去重
[root@xlj1 home]# who | awk '{print $1}' |uniq 
root
##查看登录过系统的用户
[root@xlj1 home]# who | awk '{print $1}' |sort|uniq| grep -v "^$" |grep -v wtmp 
root
##查看登录IP和使用者的个数
[root@xlj1 home]# ss -nt|tr -s " " |cut -d " " -f5|cut -d ":" -f1 |sort|uniq -c 
      2 192.168.119.1
      1 Address
##查看客户端和监听服务端个数
[root@xlj1 home]# ss -nta|grep -v 'State'|cut -d " " -f1|sort|uniq -c  
      2 ESTAB
     15 LISTEN

4. tr
  • 它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符
  • 从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出

格式:

tr [选项]... SET1 [SET2]
选项

说明

-d删除字符
-s删除所有重复出现的字符,只保留第一个
1. 示例

1.1 所有小写改大写

 1.2 指定的小写改大写

 1.3 两边字符数量不对等

当两边字符数量不对等时,相同字符只识别后一个,剩下未对应的全是最后替换字符

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/946028.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号