Shell编程之正则表达式(非常详细)

正则表达式

  • 1.通配符和正则表达式的区别
  • 2.基本正则表达式
    • 2.1 元字符 (字符匹配)
    • 2.2 表示匹配次数
    • 2.4 位置锚定
    • 2.5 分组 和 或者
  • 3.扩展正则表达式
  • 4.部分文本处理工具
    • 4.1 tr 命令
    • 4.2 cut命令
    • 4.3 sort命令
    • 4.4 uniq命令

1.通配符和正则表达式的区别

通配符一般用于文件名匹配
正则表达式一般用于匹配文件内容

2.基本正则表达式

2.1 元字符 (字符匹配)

匹配符1功能
.匹配任意单个字符,可以是一个汉字
[ … ]匹配指定范围内的任意单个字符
[ ^… ]匹配指定范围外的任意单个字符
^ [ … ]匹配以…开头
#补充说明#
.     #表示匹配任意字符
  
[.  ] #方括号中的. 就是本身的含义 

/.  #和[. ]相同
匹配符2功能
[:alnum:]字母和数字
[:alpha:]代表任何英文大小写字符,亦即 A-Z, a-z
[:upper:]大写字母,相当于[A-Z]
[:lower:]小写字母,相当于[a-z]
[:blank:]空白字符(空格和制表符)
[:space:]包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白
[:cntrl:]不可打印的控制字符(退格、删除、警铃…)
[:digit:]十进制数字
[:xdigit:]十六进制数字
[:print:]可打印字符
[:graph:]可打印的非空白字符
[:punct:]标点符号
#补充说明#
[:space:][:blank:]包含的范围广
匹配符3功能
\w匹配单词构成部分
\W匹配非单词构成部分
\s匹配任何非空白字符
\S匹配任何空白字符,包括空格、制表符、换页符等等
#补充说明#
\w 等价于[_[:alnum:]]
\W 等价于[^_[:alnum:]]
\S 等价于 [^ \f\n\r\t\v]
\s 等价于 [ \f\n\r\t\v]

2.2 表示匹配次数

匹配符功能
*匹配前面的字符任意次,包括0次
.*任意长度的任意字符,不包括0次
?匹配其前面的字符出现0次或1次
+匹配其前面的字符出现最少1次
{n}匹配前面的字符n次
{m,n}匹配前面的字符至少m次,至多n次
{,n}匹配前面的字符至多n次,<=n
{n,}匹配前面的字符至少n次

示例:怎么提取IP地址?

ifconfig ens33|grep netmask \
|grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+'|head -n1


# \+ 表示匹配前面的字符最少一次
# \. 表示转译 因为.表示匹配任意字符

在这里插入图片描述

2.4 位置锚定

匹配符功能
^行首锚定
$行尾锚定
^$空行
^ [[:space:]]*$空白行
\ < 或 \b 词首锚定
\ > 或 \b词尾锚定
\bPATTERN\b匹配整个单词

示例1:统计/etc/fstab 文件中有多少真实单词?

cat /etc/fstab | grep -o '\b[a-zA-Z]\+\b'|wc -l
#不要有空格

在这里插入图片描述

示例2: 统计/etc/fstab文件中不是已#号开头的非空行的行数

cat /etc/fstab | grep "^[^#[:space:]]"  | wc -l
# ^ 以...开头 
#[非# 和 非空行]

#或者
grep -vE "^\s*#|^$"

在这里插入图片描述

2.5 分组 和 或者

#分组#
( x y) 
将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+
#或者#
 x \| y 
 x或者y

示例:组合运用

echo 1abc 2abc 3abc |grep -o "1\|2abc"
#只匹配了1或者2abc
1  
2abc
echo 1abc 2abc 3abc |grep -o "\(1\|2\)abc"
#1abc或者2abc
1abc
2abc

在这里插入图片描述
在这里插入图片描述

3.扩展正则表达式

#基本格式#
grep -E

-E表示使用扩展正则表达式
匹配符功能
*匹配前面子表达式0次或者多次
.*任意长度的任意字符
匹配前面子表达式0次或者1次,即:可有可无
+与星号相似,表示其前面字符出现一次或多次,但必须出现一次,>=1
{n,m}匹配前面的子表达式n到m次
{m}匹配前面的子表达式m次
{n,}匹配前面的子表达式不少于n次, >=n
{,n}匹配前面的子表达式最多n次,<=n
I逻辑或方式指定正则表达式要是用的模式
()字符串分组,将括号中的字符串作为一个整体

示例1:提取当前主机的IP地址

ifconfig ens33 | grep netmask| grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'|head -n 1
#-E表示使用扩展正则表达式 

192.168.2.100 #执行结果 

在这里插入图片描述

4.部分文本处理工具

4.1 tr 命令

tr命令用于字符转换或字符删除。

#基本格式#
tr [选项] 字符集1 字符集2
#字符集1 是要被替换或删除的字符集
#字符集2 是要替换为的字符集
#常用选项#

-c 除了指定的字符之外的所有字符都会被替换
-d 表示删除指定的字符
-s 表示压缩重复的字符为单个字符

示例1: 将文本中的大写字母转换为小写字母

echo "Hello World" | tr '[:upper:]' '[:lower:]'
hello world

在这里插入图片描述

示例2:删除文本中的数字

echo "123abc456" | tr -d '[:digit:]'
abc

在这里插入图片描述

示例3:将文本中的空格合并为单个空格

echo "Hello    World" | tr -s ' '
Hello World

在这里插入图片描述

示例4: 删除文本中的特殊字符

echo "Hello @#World" | tr -d '@#'
Hello World

在这里插入图片描述

4.2 cut命令

cut命令可以提取文本数据中指定的列
cut命令可以根据指定的字符位置或指定的字段分隔符来截取文本,并将结果输出到标准输出或指定的文件。

#基本格式#
cut [选项] 文件
-d 指定字段的分隔符,默认为制表符。
-f 指定要提取的字段列表,字段列表之间使用逗号分隔,例如`-f 1,3,5`
-c 指定要提取的字符位置列表,字符位置列表之间使用逗号分隔,例如`-c 1-5,10-15`
--complement 提取指定字段或字符位置之外的内容
#提取文件的第一列

cut -f1 file.txt


#提取文件的第二、四、五列,并使用逗号作为分隔符

cut -f2,4,5 -d',' file.txt


#提取文件的前五个字符:

cut -c1-5 file.txt


# 提取文件的第一列以外的所有列:

cut -f2- --complement file.txt

4.3 sort命令

sort命令用于对文本文件进行排序,默认以字母排序

#基本格式#
sort [选项] file
#常用选项#
-b 忽略行首空白字符
-r 以倒序方式进行排序
-f 忽略大小写进行排序
-n 按照数值大小进行排序
-u 去除重复行
-t 指定字段分隔符
-k 指定按照字段排序

4.4 uniq命令

uniq 命令用于找出或删除文本文件中连续出现的重复行

#基本格式#
uniq [选项] [输入文件 [输出文件]]

#如果不指定输入文件,则会从标准输入获取数据
#如果不指定输出文件,则结果会打印到标准输出
#常用选项#

-c  在输出结果中显示每行重复出现的次数。
-d  只显示重复行。
-u  只显示不重复的行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/71795.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统下安装Git软件

环境说明 Linux系统&#xff1a;CentOS 7.9 安装GCC等 JDK版本&#xff1a;jdk-8u202-linux-x64.tar.gz Maven版本&#xff1a;apache-maven-3.8.8-bin.tar.gz 在以上环境下安装Git&#xff08;git-2.41.0.tar.gz&#xff09;软件。 查看是否安装Git软件 查看Git版本&#…

【Linux】以太网协议——数据链路层

链路层解决的问题 IP拥有将数据跨网络从一台主机送到另一台主机的能力&#xff0c;但IP并不能保证每次都能够将数据可靠的送到对端主机&#xff0c;因此IP需要上层TCP为其提供可靠性保证&#xff0c;比如数据丢包后TCP可以让IP重新发送数据&#xff0c;最终在TCP提供的可靠性机…

标记垃圾,有三种色彩:四千长文带你深入了解三色标记算法

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

ArcGIS Maps SDK for JavaScript系列之一:在Vue3中加载ArcGIS地图

目录 ArcGIS Maps SDK for JavaScript简介ArcGIS Maps SDK for JavaScript 4.x 的主要特点和功能AMD modules 和 ES modules两种方式比较Vue3中使用ArcGIS Maps SDK for JavaScript的步骤创建 Vue 3 项目安装 ArcGIS Maps SDK for JavaScript创建地图组件 ArcGIS Maps SDK for …

Java多线程知识点,看这一篇就够了!(超详细)

目录 一、认识线程&#xff08;Thread&#xff09; 1、概念 2、第一个多线程程序 &#xff08;1&#xff09;观察线程 3、创建线程 二、Thread 类及常见方法 1、Thread 的常见构造方法 2、Thread 的几个常见属性 3、启动一个线程&#xff1a;start 4、终止一个线程 &…

注意:阿里云服务器随机分配可用区说明

阿里云服务器如有ICP备案需求请勿选择随机可用区&#xff0c;因为当前地域下的可用区可能不支持备案&#xff0c;阿里云百科分享提醒大家&#xff0c;如果你的购买的云服务器搭建网站应用&#xff0c;网站域名需要使用这台云服务器备案的话&#xff0c;不要随机分配可用区&…

什么是响应式设计?列举几种实现响应式设计的方法。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是响应式设计&#xff1f;⭐ 实现响应式设计的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏…

Android OkHttp源码分析--分发器

OkHttp是当下Android使用最频繁的网络请求框架&#xff0c;由Square公司开源。Google在Android4.4以后开始将源码中 的HttpURLConnection底层实现替换为OKHttp&#xff0c;同时现在流行的Retrofit框架底层同样是使用OKHttp的。 OKHttp优点: 1、支持Http1、Http2、Quic以及Web…

使用shift关键字,写一个带二级命令的脚本(如:docker run -a -b -c中的run)

省流&#xff1a;shift关键字 探索思路 最近有一个小小的需求&#xff0c;写一个类似于docker run -a -b -c这样的脚本&#xff0c;这个脚本名为doline&#xff0c;它本身可以执行&#xff08;doline -a -b -c&#xff09;&#xff0c;同时又带有几个如run、init、start这样的…

【VSCode】查看二进制文件

1.安装插件Hex Editor 2.打开二进制文件 3.执行Hex Editor命令

基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux

2023年目前要说最热的点&#xff0c;肯定是ChatGPT了。 ChatGPT官方提供的网页版本&#xff0c;还有需要科*上网&#xff0c;很多人都会基于此进行封装。 现在是移动互联网时代&#xff0c;基于手机APP的需求还是很大的。 所以&#xff0c;今天给大家推荐一个ChatGPT客户端开…

YOLOv5入门实践(2)— 手把手教你使用make sense标注数据集(附工具地址+使用教程)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。鉴于labelimg图像标注软件安装起来比较麻烦&#xff0c;本节课再给大家介绍另外一款数据集标注工具。这是一款在线标注数据集的工具&#xff0c;用起来非常的方便。&#x1f308; 前期回顾&#xff1a; YOLOv5入门实践&…

【深度学习MOT】SMILEtrack SiMIlarity LEarning for Multiple Object Tracking,论文

论文&#xff1a;https://arxiv.org/abs/2211.08824 文章目录 AbstractIntroduction2. 相关工作2.1 基于检测的跟踪2.1.1 检测方法2.1.2 数据关联方法 2.2 基于注意力的跟踪 3. 方法3.1 架构概述3.2 用于重新识别的相似性学习模块&#xff08;SLM&#xff09; Experimental Res…

Mysql数据库第十三课-----------sql语句的拔高3--------直冲云霄

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

【MySQL--->数据库基础】

文章目录 [TOC](文章目录) 一、基本概念二、实际应用中的数据库三、mysql的架构四、mysql语句分类五、存储引擎查看 一、基本概念 mysql本质是一个CS模式的网络服务,mysql是客户端,mysqld是服务端,提供高效的数据存取方案.数据库系统简单来说是一个数据集合加上管理这个数据集…

Git介绍及常用命令详解

一、Git的概述 Git是一个分布式版本控制工具&#xff0c;通常用来对软件开发过程中的源代码文件进行管理。 Git 会跟踪我们对文件所做的更改&#xff0c;因此我们可以记录已完成的工作&#xff0c;并且可以在需要时恢复到特定或以前的版本。Git 还使多人协作变得更加容易&…

网络安全的相关知识点

网络安全威胁类型&#xff1a; 1.窃听&#xff1a;广播式网络系统。 2.假冒 3.重放&#xff1a;重复一份报文或者报文的一部分&#xff0c;以便产生一个被授权的效果。 4.流量分析 5.数据完整性破坏 6.拒绝服务 7.资源的非授权使用 8.陷门和特洛伊木马&#xff1a;木马病毒有客…

Telerik UI for ASP.NET Core Crack

Telerik UI for ASP.NET Core Crack Telerik ASP.NET Core还包括MVC和Kendo UI捆绑包(用于JavaScript)、Figma的设计工具包以及文档处理库、用于ASP.NET Core的Telerik REPL、RTL支持、辅助功能和键盘导航、主题化、虚拟课堂培训、详细文档、演示、KBs和世界级支持。使用一整套…

Ubuntu 20.04 APT 方式安装 mysql 5.7

Ubuntu 20.04 直接 apt 安装的 mysql 是 8.0 &#xff0c;现在需要安装 5.7 版本&#xff0c;还颇费周章&#xff01;按照文档直接点进去那个 MySQL APT Repository 中&#xff08;https://dev.mysql.com/downloads/repo/apt/&#xff09;只显示了 8.0 &#xff0c;没有其他版本…

RHEL 7配置HAProxy实现Web负载均衡

一、测试环境HAProxy&#xff1a; 主机名&#xff1a;RH7-HAProxy IP地址&#xff1a;192.168.10.20 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.2 (Maipo)最小化安装 防火墙与SELinux&#xff1a;关闭 安装的服务&#xff1a;HAProxy-1.5.14 WEB01: 主…