Shell基础—正则表达式(通配符、模式表达式)详解【附例】

2023-10-30

Shell基础–正则表达式

正则表达式是一种可以用于模式匹配和替换的工具。通过正则表达式,Shell可以使用一系列的特殊字符构建匹配模式,然后将匹配模式与待比较字符串或文件进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。

1.通配符

通配符用于模式匹配,如字符串查找、文件名匹配与搜索等。 常用通配符有以下6种。

1.*(星号):表示任何字符串,可以匹配空字符串。
例如:*log*表示含有log的字符串。
在这里插入图片描述
2.?(问号):表示任何单个字符。
例如:a?c表示由a、任意字符和b组成的字符串。
在这里插入图片描述
3.[](一对方括号):表示一个字符序列。字符序列可以直接包括若干字符,
例如:[abc]表示a、b、c之中的任一字符;
也可以是由“-”连接起止字符形成的序列,
例如:[abc-fp]表示a、b、c、d、e、f、p之中的任一字符。

除连字符“-”之外,其他特殊字符在[]中都是普通字符,包括*和?。
在这里插入图片描述
注意文件夹test中没有文件d和文件p。

4.!(感叹号):在[]中使用!表示排除其中任意字符。
如[!ab]表示不是a或b的任一字符。
在这里插入图片描述
5. ^(幂符号):只在一行的开头匹配字符串。
如执行命令^ubuntu表示以单词ubuntu开头 的所有文件"。
在这里插入图片描述
6. $(美元符号):只在行尾匹配字符串,它放在匹配单词的后面。
例如:linux$表示以单词Linux结尾 的所有文件。
在这里插入图片描述

:ls命令没有把^、$这两个符号识别为特殊符号,总把它们当成文件和目录的一部分,因此需要使用管道和grep -E这个选项支撑正则表达式。

(将ls的执行结果作为grep命令的操作对象,grep命令在从ls的执行结果中,去找出符合条件的数据)

2.模式表达式

模式是那些包含一个或多个通配符的字符串,各模式之间以竖线(|)分开。bash除支持上述通配符外,还提供了以下特有的扩展模式匹配表达式。

1.*:匹配任意多个模式。(匹配0个或多个模式)
例如:file*(.c|.o)匹配文件file、file.c、file.c.c、file.c.o、file.o、file.o.c、file.o.o等,但不匹配file.h、file.s等。
在这里插入图片描述
2.+:匹配一个或多个模式。(匹配1个或多个模式)
例如:file+(.c|.o)匹配文件file.c、file.c.c、file.c.o、file.o、file.o.c、file.o.o等,但不匹配file。
在这里插入图片描述
3.?:匹配模式表中任何一种模式。(匹配0个或1个模式)
例如:file?(.c|.o)只匹配文件file、file.c、file.o等,不匹配file.c.c、file.c.o等。
在这里插入图片描述
4.@:仅匹配模式表中一个给定模式。(匹配1个模式)
例如:file@(.c|.o)只匹配文件file.c和file.o,但不匹配file、file.c.c、file.c.o等。
在这里插入图片描述
5.!:除给定模式表中的一个模式之外,它可以匹配其他任何字符串。
例如:file!(.c)可以匹配file、file.c.c、file.c.o、file.o、file.o.c、file.o.o,但不匹配file.c。
在这里插入图片描述
注意:在实际使用时,模式表达式可以递归,即每个表达式中都可以包含一个或多个模式。例如:file*(.[cho]|.sh)是合法的模式表达式。

提示:上述操作进入的test文件夹中有如下文件:

a apc c f file.c file.c.o file.o.c log.log ubuntu_linux
adc b e file file.c.c file.o file.o.o os.log
即:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell基础—正则表达式(通配符、模式表达式)详解【附例】 的相关文章

  • 无法为 Python 3.4 创建工作虚拟环境

    I 安装Python 3 4 2 https docs python org 3 using unix html building python和我的 Linux Mint 17 1 中的 Virtualenv 12 0 5 然后我尝试创建
  • 测试linux下磁盘空间不足

    我有一个程序 当写入某个文件的磁盘空间不足时 该程序可能会死掉 我不确定是否是这种情况 我想运行它并查看 但我的测试服务器不会很快耗尽空间 有什么办法可以嘲笑这种行为吗 看起来没有任何方法可以在 Ubuntu 中设置文件夹 文件大小限制 并
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • Docker DNS 设置

    我尝试使用自定义网络和 dos 设置创建 docker 容器 docker网络创建 driver bridge opt com docker network bridge enable ip masquerade true opt com
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • 编写多个mysql脚本

    是否可以在复合脚本中包含其他 mysql 脚本 理想情况下 我不想为包含的脚本创建存储过程 对于较大的项目 我想分层维护几个较小的脚本 然后根据需要组合它们 但现在 我很乐意学习如何包含其他脚本 source是一个内置命令 您可以在 MyS
  • gdb 错误 - 文件不是可执行格式:无法识别文件格式

    我正在尝试使用 gdb 调试某个名为 xdf 的程序 但是当我运行 gdb xdf 时 出现以下错误 home nealtitusthomas X ray astronomy heasoft 6 24 x86 64 pc linux gnu
  • 如何使用ffmpeg重叠和合并多个音频文件?

    我正在尝试将多个音频文件合并到一个文件中 但我可以使用以下命令来连接 而不是连接 ffmpeg v debug i file1 wav i file2 wav i file3 wav filter complex 0 0 concat n
  • 如何仅将整个嵌套目录中的头文件复制到另一个目录,在复制到新文件夹后保持相同的层次结构

    我有一个目录 其中有很多头文件 h 和其他 o 和 c 文件以及其他文件 这个目录里面有很多嵌套的目录 我只想将头文件复制到一个单独的目录 并在新目录中保留相同的结构 cp rf oldDirectory newDirectory将复制所有
  • 在 Ubuntu 16.04 中创建虚拟主机

    我已经开始在 laravel 中工作并使用 lampp 我看过很多使用虚拟主机来制作用户友好的 url 的教程 我想在 Ubuntu 16 04 上执行此操作 以下教程对我不起作用 https ourcodeworld com articl
  • 使用脚本自动输入 SSH 密码

    我需要创建一个自动向 OpenSSH 输入密码的脚本ssh client 假设我需要通过 SSH 进入myname somehost用密码a1234b 我已经尝试过 bin myssh sh ssh myname somehost a123
  • sqlite 插入需要很长时间

    我正在将不到 200 000 行插入到 sqlite 数据库表中 我只是在终端中通过 sqlite3 使用一个非常简单的 sql 文件 我打赌它已经运行了至少 30 分钟 这是正常现象还是我应该关闭该过程并尝试不同的方法 sqlite中的插
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • Linux 中的电源管理通知

    在基于 Linux 的系统中 我们可以使用哪些方法 最简单的方法 来获取电源状态更改的通知 例如 当计算机进入睡眠 休眠状态等时 我需要这个主要是为了在睡眠前保留某些状态 当然 在计算机唤醒后恢复该状态 您只需配置即可获得所有这些事件acp
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些
  • 如何在 Linux 主机上的 docker 容器中挂载目录 [重复]

    这个问题在这里已经有答案了 我想将一个目录从 docker 容器挂载到本地文件系统 该目录是网站根目录 我需要能够使用任何编辑器在本地计算机上编辑它 我知道我可以跑docker run v local path container path
  • 如何从 Linux 命令行获取视频文件的分辨率(宽度和高度)?

    我一直在挖掘 mplayer mencoder 和 ffmpeg 文档 但我似乎无法想出anything 我对输出格式不是特别挑剔 因为我可以使用正则表达式将其拉出来 我只是似乎无法首先获取数据 Use ffprobe https ffmp
  • python:numpy 运行脚本两次

    当我将 numpy 导入到 python 脚本中时 该脚本会执行两次 有人可以告诉我如何阻止这种情况 因为我的脚本中的所有内容都需要两倍的时间 这是一个例子 usr bin python2 from numpy import print t
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015

随机推荐

  • JLINK在ADS中的调试心得

    JLINK在ADS中的调试心得 分类 ARM 2010 01 03 19 39 138人阅读 评论 0 收藏 举报 分享 JLINK在ADS下调试心得 前两天一个客户用jlink在ADS来调试LPC2148总报错 这个错误我之前在调试LPC
  • 【论文精读】HumanNeRF

    目录 Abstract 1 Introduction 2 Related work Human specific rendering Neural radiance fields Human specific neural renderin
  • Java:抽象类和接口

    文章目录 抽象类 什么是抽象类 抽象类的特性 为什么会有抽象类这种东西 接口 什么是接口 接口的特性 匿名内部类 拓展 实现多个接口 接口间的继承 三个重要的接口 Comparable接口 Comparator接口 Clonable接口 浅
  • 关于 Cannot read property 'length' of null 报错的解决办法

    最近在搞前端的时候突然报了Cannot read property length of null的错 一开始都是在前端调试错 发现解决不了问题 后来发现如果你所查找的数据条数为0的时候 后端返回给前端是null 此时必然报错Cannot r
  • CityEngine三维建模几个常见问题解决方法(1)

    CityEngine被Esri收购以后 大踏步进入GIS三维建模领域 由于CityEngine独有的基于规则建模 使得GIS三维建模效率大增 不过不是规则就可以一刀切 解决所有问题的 有时我们还是要做这样或那样的一些处理才能顺利的使用规则达
  • Mysql8.0开启远程访问权限

    use mysql 登录后选择mysql数据库 select host user password from user 查看当前root对应host是否为 update user set host where user root 更新 se
  • 基于YOLOv5+Hough变换的目标检测和车道线检测

    这学期做的一个大作业 实现了对行驶过程中车辆 行人以及车道线的检测 1 B站视频演示 2 Github仓库链接 文章目录 一 实现效果 二 环境配置 三 基于YOLOv5的目标检测 四 基于Hough变换的车道线检测 4 1 前置工作 Ca
  • 鸿蒙3部曲先看哪部,“隋唐三部曲”“鸿蒙三部曲”“斗罗四部曲”谁才是网文巅峰之作...

    原标题 隋唐三部曲 鸿蒙三部曲 斗罗四部曲 谁才是网文巅峰之作 从网络小说诞生的那一刻起 续集就是一个绕不过去的话题 如同电视剧一样 一部网络小说红了之后 它的原作者很多时候会忍不住开发它的续集 形成一个系列 然后再现网文界 小编今天就给大
  • java开发转测试开发经历

    1 背景 我从毕业一直做java开发已经两年半了 到目前为止也挺喜欢开发的 2 为什么想转行 想转行是由多方面考虑的 一 我的开发技能没达标 只能找到外包里的开发工作 二 开发前景对女生不够友好 难以获得认可 个人感受 至于第一点其实也可以
  • 减少数据打拍翻转的低功耗设计方法

    在流水设计中 时常会遇到对某一路数据打多拍从而对齐另一路数据的场景 而除了最后一拍是真正需要的 中间的打拍从功耗上来看是有点浪费的 举个例子 对8bit in data打4拍 总共需要用到4个8bit寄存器 常规打拍方法传输4个数据 D0
  • android 屏幕适配--------解决方案

    以下是Demo首页的预览图 demo下载 http www eoeandroid com forum php mod attachment aid NjE0Njh8ZTIyZDA2M2N8MTMzODgyOTQxN3w1NzAwOTV8MT
  • Spring Boot实现QQ邮件发送,用户注册功能——前后端分离版

    1 准备工作 我们需要前往我们的QQ邮箱开启相关功能 登录QQ邮箱后 点击进入 设置 在账户在一栏中 我们可以找到这个界面 然后点击开启 POP3 SMTP服务 他们会让我们用QQ的密保手机发送一条短信 我们照着即可 验证成功之后 会获得一
  • ISP记1

    目录 0 参考 1 噪声分类 1 1 空间区域 1 1 1 高斯噪声 1 1 2 瑞利噪声 1 1 3 伽马噪声 1 1 4 均匀分布噪声 1 1 5 泊松噪声 1 1 6 加性噪声 乘性噪声 0 参考 数字图像滤波算法的研究及应用 倪层敏
  • anaconda+pytorch安装说明

    第一步 anconda的安装 大家可以参考以下博文 写的比较简约 看起来比较清爽 https blog csdn net ITLearnHall article details 81708148 Anacond的介绍 Anaconda指的是
  • chisel线网(wire)和寄存器(reg)详解(更新)

    主体内容摘自 https blog csdn net qq 34291505 article details 87714172 在Verilog里 模块内部主要有 线网 wire 和 四态变量 reg 两种硬件类型 它们用于描述数字电路的组
  • QVariant的使用

    在有些情况下 我们希望把数据存储在一个变量中 例如 我有一个数组 既希望存整数 又希望存浮点数 还希望存string 想了一个方法 创建一个object类 这是一个很大的类 里面几乎包含了所有类型的数据 如下 class Object pu
  • Java合并两个有序数组

    合并排序 将两个已经排序的数组合并成一个数组 其中一个数组能容下两个数组的所有元素 public class MergeArray public MergeArray public static ArrayList
  • 【APB协议详解】

    APB协议详解 APB Advanced Peripheral Bus 作为高级外设总线是AMBA协议之一 也是最基本的总线协议 按照ARM官方定义 APB是一种低成本的接口协议 可以实现低功耗以及精简的接口设计 降低接口设计的复杂度 AP
  • adb操作提示Read-only file system问题

    Android adb调试时 经常会遇到权限问题 failed for system lib libmm test so Read only file system 即使Root设备 在向 system等系统文件夹操作时 比如push rm
  • Shell基础—正则表达式(通配符、模式表达式)详解【附例】

    Shell基础 正则表达式 正则表达式是一种可以用于模式匹配和替换的工具 通过正则表达式 Shell可以使用一系列的特殊字符构建匹配模式 然后将匹配模式与待比较字符串或文件进行比较 根据比较对象中是否包含匹配模式 执行相应的程序 1 通配符