Linux ---- Shell编程之正则表达式

news2024/9/22 21:31:55

一、正则表达式

​         由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

作用:匹配文件中的内容

本质:学习各种各样的元字符并记住这个元字符的含义

1、正则表达式概述

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

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

  • 基础正则表达式:BRE
  • 扩展正则表达式:ERE
文本处理工具基础正则表达式扩展正则表达式
vim  编辑器支持\
grep支持\
egrep支持支持
sed支持\
awk支持支持

2.正则表达式搜索:

  • 元字符:预定义好的具有特殊含义的符号,这些符号能够进行通配
  • 可读性非常的差
  • 写正则表达式不难

3.部分元字符区别对待:

扩展正则中这些元字符剋直接使用:?、+、{ 、}、| 、(和)。

基础正则中这些元字符需要加反斜线表示转义:\? 、\+ 、 \{  、\}、\| 、\( 和 \)。

grep  sed默认使用基础正则表达式

grep -E 、sed  -r 、 egrep、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,goooood等
|以或的方式匹配字条串,如:good | great,将匹配good或着great

1.定位符

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

2.非打印字符

  • \n匹配一个换行符
  • \r匹配一个回车符
  • \t匹配一个制表符

二、grep命令

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

格式:

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

常用的选项:

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

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

-c 只打印匹配的文本行的次数,不显示文本内容。

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

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

3、将非空行写入到文件中

4、过滤ip地址

三、元字符操作案例

1、查找特定字符

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

2、查找特定集合字符

1. 查找既有i又有o的特殊字符

想要查找“shirt”与“short”这两个字符串时,可以发现这两个字符串均包含“sh”与“rt”。此时执行以下命令即可同时查找到“shirt”与“short”这两个字符串,其中“[]”中无论有几个字符, 都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”。

2. 查找单个重复字符

查找重复字符,例如“oo”时,会显示两个o及两个o以上的行

3. 查找oo前面不是R开头的行

从后往前看,例如当出现Rooot时,会显示这行,因为从后往前看oo前面还是o,符合条件

4. 查找oo前面不是大小写字母开头的行

5. 查找包含数字的行

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

7.查找以.结尾的行

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

4、查找连续字符范围 "{}"

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

 1.查询2个o的字符

2.查询两个字母之间包含多个字符串的行

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 数论相关题目 博弈论:拆分-Nim游戏

给定 n 堆石子,两位玩家轮流操作,每次操作可以取走其中的一堆石子,然后放入两堆规模更小的石子(新堆规模可以为 0 ,且两个新堆的石子总数可以大于取走的那堆石子数),最后无法进行操作的人视为失…

如何在win系统部署Apache服务并实现无公网ip远程访问

文章目录 前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpolar web ui管理界面3.2 创建公网地址 4. 固定公网地址 前言 Apache作为全球使用较高的Web服务器…

MySQL解决 恢复从备份点到灾难点之间数据(不收藏找不到了)

CSDN 成就一亿技术人! 今天分享一期 mysql中 备份之后发生灾难造成数据丢失 那么如何恢复中间的数据呢? 数据库数据高于一切(任何数据是不能丢失的) CSDN 成就一亿技术人! 目录 1.准备测试数据库 2.备份数据库 观…

CCF-CSP 202312-1 仓库规划(Java、C++、Python)

文章目录 仓库规划问题描述输入格式输出格式样例输入样例输出子任务 满分代码JavaCPython 仓库规划 问题描述 西西艾弗岛上共有 n n n 个仓库, 依次编号为 1 ⋯ n 1 \cdots n 1⋯n 。每个仓库均有一个 m m m 维向量的位置编码, 用来表示仓库间的物流运转关系。 具体来说,…

机器学习 | 掌握 K-近邻算法 的理论实现和调优技巧

目录 初识K-近邻算法 距离度量 K值选择 kd树 数据集划分 特征预处理 莺尾花种类预测(实操) 交叉验证与网格搜索 初识K-近邻算法 K-近邻算法(K-Nearest Neighbor,KNN)是一种基本的分类和回归算法。它的基本思想是通过找出与新对象最近…

git远程仓库基本操作

目录 gitremote (查看远程仓库) git remote add [仓库名] [url] git clone [url](克隆远程仓库到本地) git push [名][分支名](提交到远程仓库)​编辑 git pull [名][分支名]从远程仓库拉取​编辑 注意操作…

SpringBoot拉取高德行政区域数据

SpringBoot拉取高德行政区域数据 一、账号申请 1.整体流程 行政区域文档:https://lbs.amap.com/api/webservice/guide/api/district 整体流程可参考:https://lbs.amap.com/api/webservice/guide/create-project/get-key 2.注册账号 注册地址&#…

js padEnd方法介绍笔记

padEnd() 是 JavaScript 字符串的方法之一,它用于在当前字符串的末尾添加指定数量的字符,直到字符串达到指定的长度。 padEnd() 方法接受两个参数: 目标长度和要添加的填充字符。 如果当前字符串的长度已经等于或超过目标长度,则不…

你应该仅仅把useMemo作为性能优化的手段

文章概叙 本文主要通过几个简单的例子,讲解下useMemo这个hook,给诸君参考,也是给我自己做一个记录 关于useMemo useMemo是一个React Hook,它在每次重新渲染的时候能够缓存计算的结果。 相比于其他很常用的hook,如u…

LPC804开发(7.SPI使用)

1.前言 原本说写ADC,但是考虑到6已经给了串口,算了算了,还是把SPI和IIC放到7和8吧。整体用下来感觉NXP的协议比ST和TI开发的完善的,都可以走硬件,比较完善的底层开发,没有硬伤,那么接下来我们来…

教你一招轻松把模糊的照片变高清

亲爱的朋友们,你们是否也曾经遇到过这样的问题——精心拍摄的照片或珍藏已久的图片突然变得模糊不清,让人心情郁闷?别担心,我发现了解决这个问题的秘诀!借助一些专业的图片修复工具,那些模糊的瞬间可以重新…

react实现滚动到顶部组件

新建ScrollToTop.js import React, { useState, useEffect } from react; import ./ScrollToTop.css;function ScrollToTop() {const [isVisible, setIsVisible] useState(true);// Show button when page is scorlled upto given distanceconst toggleVisibility () > {…

一分钟在SpringBoot项目中使用EMQ

先展示最终的结果: 生产者端: RestController RequiredArgsConstructor public class TestController {private final MqttProducer mqttProducer;GetMapping("/test")public String test() {User build User.builder().age(100).sex(1).address("世界潍坊渤…

Wireshark网络协议分析 - UDP协议

在我的博客阅读本文 文章目录 1. 基础2. 实战2.1. 用Go写一个简单的UDP服务器与客户端2.2. Wireshark抓包分析 3. UDP与TCP的区别4. 参考资料 1. 基础 UDP包的数据结构: 2. 实战 2.1. 用Go写一个简单的UDP服务器与客户端 我们这里使用Golang写了一个简单的9830端…

docker由浅入深

一、什么是docker docker 顾名思义就是轮船的意思,轮船我们知道是通过集装箱运载货物的东西,那么docker其实也是类似的东西,只是装载的是虚拟的运行程序罢了。其中集装箱在docker里面被称为container(后面以容器称之)…

林浩然的Python奇遇记:从小白到科学界的编程魔法师

林浩然的Python奇遇记:从小白到科学界的编程魔法师 Lin Haoran’s Python Adventure: From Novice to Programming Sorcerer in the Scientific Realm 在那个平凡的午后,我们的主角林浩然——一个对编程一窍不通但对世界充满好奇的物理学大二学生&#x…

qiankun子应用静态资源404问题有效解决(遇到了http请求静态文件404、css文件引用图片无法显示、svg图片转换成 base64无法显示等问题)

在👉🏻 qiankun微前端部署👈🏻这个部署方式的前提下,遇到的问题并解决问题的过程 >> 问题现象 通过http请求本地的静态json文件404 css中部分引入的图片无法显示 >> 最开始的解决方式 在👉…

Linux第36步_创建正点原子的TF-A工作区

创建正点原子的TF-A工作区,目的是想查看正点原子的设备树文件“stm32mp157d-atk.dts”和设备树头文件“stm32mp157d-atk.dtsi”,了解设备树是什么样子,为后期基于“ST公司的源码”创建自己的设备树提供参考,同时也是为了学习移植u…

飞桨大模型分布式训练技术

今天我为大家介绍飞桨大模型分布式训练技术,内容分为以下几个部分: 首先,我会介绍大模型训练面临的重点难题;然后,为大家介绍飞桨在大模型训练领域的特色分布式训练技术和优化方案;最后,伴随着…

NeRF:神经辐射场复杂场景的新视图合成技术

NeRF:神经辐射场复杂场景的新视图合成技术 NeRF:神经辐射场复杂场景的新视图合成技术项目背景与意义如何运行?快速开始更多数据集 预训练模型方法与实现结语服务 NeRF:神经辐射场复杂场景的新视图合成技术 在计算机视觉领域&…