当前位置: 首页 > article >正文

Linux shell 正则表达式高效使用

Linux正则表达式高效使用教程

正则表达式是Linux命令行中强大的文本处理工具,能够极大提高搜索和匹配效率。下面为新手提供一个简单教程,介绍如何在grepfind命令中使用正则表达式。
使用建议:使用grep时要加-E选项使其支持扩展正则表达式,配合findxargs得到更精确的匹配结果。

一、正则表达式基础

1. 基本元字符
  • .:匹配任意单个字符(换行符除外)
  • *:匹配前面的字符0次或多次
  • +:匹配前面的字符1次或多次(扩展正则表达式)
  • ?:匹配前面的字符0次或1次(扩展正则表达式)
  • ^:匹配行首
  • $:匹配行尾
  • []:匹配方括号内的任意一个字符
  • [^]:匹配不在方括号内的任意一个字符
  • |:逻辑或,匹配两个模式之一(扩展正则表达式)
2. 字符类简写
  • [0-9]:匹配任意数字,等价于\d(PCRE模式)
  • [a-zA-Z]:匹配任意字母
  • [[:space:]]:匹配任意空白字符(空格、制表符等)
  • [[:alpha:]]:匹配任意字母
  • [[:digit:]]:匹配任意数字

二、在grep中使用正则表达式

1. 基本用法
grep '模式' 文件名
2. 常用选项
  • -E:启用扩展正则表达式(支持+?|等)
  • -i:忽略大小写
  • -r:递归搜索目录
  • -n:显示匹配行的行号
  • -v:取反匹配(显示不匹配的行)
  • -o:只输出匹配的部分
3. 示例
  • 查找包含数字的行

    grep '[0-9]' file.txt
    
  • 查找以#开头的注释行

    grep '^#' config.ini
    
  • 查找包含"apple"或"banana"的行(扩展正则)

    grep -E 'apple|banana' fruits.txt
    
  • 查找以字母开头,后跟一个或多个数字的行

    grep -E '^[a-zA-Z][0-9]+' data.txt
    
  • 查找 main 函数所在位置

    grep -rE 'main\(\)' ./    # 加-E的结果远比不加-E的结果精确
    

三、在find中使用正则表达式

1. 基本用法
find 路径 -regex '正则表达式'  # 匹配完整路径
find 路径 -iregex '正则表达式' # 忽略大小写
2. 常用选项
  • -name:按文件名匹配(支持通配符,非正则)
  • -regex:按完整路径匹配(使用正则)
  • -iregex:按完整路径匹配(忽略大小写)
  • -type f:只匹配文件
  • -type d:只匹配目录
  • -mtime -n:匹配n天内修改的文件
3. 示例
  • 查找所有 .txt 或 .md 文件

    find . -regex '.*\.\(txt\|md\)'
    
  • 查找所有以数字开头的文件

    find . -regex '.*/[0-9].*'
    
  • 查找src目录下的C或C++源文件

    find src -iregex '.*\.\(c\|cpp\|h\|hpp\)'
    

四、进阶技巧

因为很多命令无法接收管道输出结果只能接受stdin输入命令,xargs的作用是把管道输出转为stdin输入,这样find就可以和grep结合啦。(让grep只在find得到的文件中查找)
xargs命令教程,太好用啦

1. 结合xargs提高效率

find的结果传递给其他命令:

find ./ -name *.c | xargs grep -nE ' main\('
find . -name '*.txt' -print0 | xargs -0 grep 'pattern'
  • -print0:使用null分隔结果,避免空格问题
  • -0:告诉xargs使用null作为分隔符
2. 使用正则表达式重命名文件

结合rename命令:

# 将所有.jpg文件重命名为.jpeg
rename 's/\.jpg$/.jpeg/' *.jpg
3. 在管道中使用正则
ps aux | grep -E '[f]irefox|chrome'  # 查找Firefox或Chrome进程
  • [f]技巧:避免grep自身出现在结果中

五、练习与巩固

1. 练习题
  • 查找所有包含邮箱地址的行(正则:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
  • 查找所有以"error"或"warning"开头的日志行
  • 查找所有包含连续3个数字的文件
2. 参考资源
  • man grepman find 查看官方文档
  • 在线正则测试工具:https://regex101.com/
  • 正则表达式速查表:https://www.debuggex.com/cheatsheet/regex/pcre

六、注意事项

  1. 基本 vs 扩展正则grep默认使用基本正则,需用-E启用扩展
  2. 转义问题:在基本正则中,()|等特殊字符需要转义(如\|
  3. 性能考虑:复杂正则可能影响效率,尽量简化模式
  4. 测试优先:在处理重要文件前,先用小样本测试正则表达式

掌握这些技巧后,你将能够快速定位文件、筛选文本,大幅提高命令行工作效率!

相关文章:

Linux shell 正则表达式高效使用

Linux正则表达式高效使用教程 正则表达式是Linux命令行中强大的文本处理工具,能够极大提高搜索和匹配效率。下面为新手提供一个简单教程,介绍如何在grep和find命令中使用正则表达式。 使用建议:使用grep时要加-E选项使其支持扩展正则表达式&…...

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Blurry Loading (毛玻璃加载)

📅 我们继续 50 个小项目挑战!—— Blurry Loading 组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/ ✨ 组件目标 实现一个加载进度条,随着加载进度的…...

C#中的ThreadStart委托

ThreadStart 委托&#xff1a; ThreadStart 是 .NET 中的一个内置委托类型&#xff0c;表示无参数且无返回值的方法。其定义如下&#xff1a; public delegate void ThreadStart(); 通常用于定义线程的入口方法。 List<ThreadStart>&#xff1a; 这是一个泛型集合&…...

GPU加速Kubernetes集群助力音视频转码与AI工作负载扩展

容器编排与GPU计算的结合&#xff0c;为追求性能优化的企业开辟了战略转型的新路径 基于GPU的托管Kubernetes集群不仅是技术选择&#xff0c;更是彻底改变企业处理高负载任务的战略部署方式。 随着人工智能和机器学习项目激增、实时数据处理需求的剧增&#xff0c;以及高性能媒…...

LeetCode[222]完全二叉树的节点个数

思路&#xff1a; 这个节点个数可以使用递归左儿子个数递归右儿子个数1&#xff0c;这个1是根节点&#xff0c;最后结果为节点个数&#xff0c;但我们没有练习到完全二叉树的性质. 完全二叉树的性质是&#xff1a;我简单说一下&#xff0c;大概就是其他节点都满了&#xff0c;就…...

DPDK 技术详解:榨干网络性能的“瑞士军刀”

你是否曾感觉&#xff0c;即使拥有顶级的服务器和万兆网卡&#xff0c;你的网络应用也总是“喂不饱”硬件&#xff0c;性能总差那么一口气&#xff1f;传统的网络处理方式&#xff0c;就像在高速公路上设置了太多的收费站和检查点&#xff0c;限制了数据包的“奔跑”速度。 今…...

anaconda的c++环境与ros2需要的系统变量c++环境冲突

在conda虚拟环境中运行有ros2的代码报错 ImportError: /home/user/anaconda3/envs/myenv/bin/../lib/libstdc.so.6: version GLIBCXX_3.4.30 not found(required by /opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.…...

Docker 疑难杂症解决指南大纲

一、Docker 基础问题排查 Docker 服务无法启动 错误提示:Cannot connect to the Docker daemon 可能原因:Docker 服务未运行、权限问题、端口冲突。 解决方案: 检查服务状态:systemctl status docker 重启服务:systemctl restart docker 用户权限:将用户加入 docker 组。…...

深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务

深入解析Spring Boot与Kafka集成&#xff1a;构建高效消息驱动微服务 引言 在现代微服务架构中&#xff0c;消息队列是实现服务解耦和异步通信的重要组件。Apache Kafka作为分布式流处理平台&#xff0c;因其高吞吐量、低延迟和可扩展性&#xff0c;成为企业级应用的首选。本…...

Python 实现web请求与响应

目录 一、什么是web 请求与响应&#xff1f; 1、Web 请求 2、web 响应 3、HTTP协议概述 4、常见的HTTP状态码包括 二、Python 的requests库 1、安装requests库 2、发送GET请求 3、发送POST请求 4、处理响应头和状态码 5、发送带查询参数的GET请求 6、发送带表单数据…...

演示:【WPF-WinCC3D】 3D工业组态监控平台源代码

一、目的&#xff1a;分享一个应用WPF 3D开发的3D工业组态监控平台源代码 二、功能介绍 WPF-WinCC3D是基于 WPF 3D研发的工业组态软件&#xff0c;提供将近200个预置工业模型&#xff08;机械手臂、科幻零部件、熔炼生产线、机加生产线、管道等&#xff09;&#xff0c;支持组态…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】1.4 数据库与表的基本操作(DDL/DML语句)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 1.4 数据库与表的基本操作&#xff08;DDL/DML语句&#xff09;1.4.1 数据库生命周期管理&#xff08;DDL核心&#xff09;1.4.1.1 创建数据库&#xff08;CREATE DATABASE&…...

CUDA加速的线性代数求解器库cuSOLVER

cuSOLVER是NVIDIA提供的GPU加速线性代数库&#xff0c;专注于稠密和稀疏矩阵的高级线性代数运算。它建立在cuBLAS和cuSPARSE之上&#xff0c;提供了更高级的线性代数功能。 cuSOLVER主要功能 1. 稠密矩阵运算 矩阵分解: LU分解 (gesvd) QR分解 (geqrf) Cholesky分解 (potrf…...

Oracle 物理存储与逻辑管理

1. 表空间&#xff08;Tablespace&#xff09; 定义&#xff1a; 表空间是Oracle中最高级别的逻辑存储容器&#xff0c;由一个或多个物理数据文件&#xff08;Datafile&#xff09;组成。所有数据库对象&#xff08;如表、索引&#xff09;的逻辑存储均属于某个表空间。 类型与…...

vscode优化使用体验篇(快捷键)

本文章持续更新中 最新更新时间为2025-5-18 1、方法查看方法 1.1当前标签跳到新标签页查看方法实现 按住ctrl 鼠标左键点击方法。 1.2使用分屏查看方法实现(左右分屏) 按住ctrl alt 鼠标左键点击方法。...

如何在电脑上登录多个抖音账号?多开不同IP技巧分解

随着短视频的爆发式增长&#xff0c;抖音已经成为许多人生活和工作的必备平台。不论是个人内容创作者、品牌商家&#xff0c;还是营销人员&#xff0c;都可能需要管理多个抖音账号。如何在电脑上同时登录多个抖音账号&#xff0c;提升工作效率&#xff0c;避免频繁切换账号的麻…...

【东枫科技】usrp rfnoc 开发环境搭建

作者 太原市东枫电子科技有限公司 &#xff0c;代理销售 USRP&#xff0c;Nvidia&#xff0c;等产品与技术支持&#xff0c;培训服务。 环境 Ubuntu 20.04 依赖包 sudo apt-get updatesudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils …...

【JAVA资料,C#资料,人工智能资料,Python资料】全网最全编程学习文档合集,从入门到全栈,保姆级整理!

文章目录 前言一、编程学习前的准备​1.1 明确学习目标​1.2 评估自身基础​ 二、编程语言的选择​2.1 热门编程语言介绍​2.2 如何根据目标选择语言​ 三、编程基础学习​3.1 变量与数据类型​3.2 控制结构​3.3 函数​ 四、面向对象编程&#xff08;OOP&#xff09;​4.1 OOP…...

[IMX] 05.串口 - UART

目录 1.通信格式 2.电平标准 3.IMX UART 模块 4.时钟寄存器 - CCM_CSCDR1 5.控制寄存器 5.1.UART_UCR1 5.2.UART_UCR2 5.3.UART_UCR3 6.状态寄存器 6.1.UART_USR1 6.2.UART_USR2 7.FIFO 控制寄存器 - UART_UFCR 8.波特率寄存器 8.1.分母 - UART_UBIR 8.2.分子 -…...

使用Tkinter写一个发送kafka消息的工具

文章目录 背景工具界面展示功能代码讲解运行环境创建GUI程序搭建前端样式编写功能实现代码 背景 公司是做AR实景产品的&#xff0c;近几年无人机特别的火&#xff0c;一来公司比较关注低空经济这个新型领域&#xff0c;二来很多政企、事业单位都采购了无人机用于日常工作。那么…...

MongoDB 与 EF Core 深度整合实战:打造结构清晰的 Web API 应用

题纲 MongoDB 字符串连接 URIC# 连接字符串实例 实现一个电影信息查询 demo创建项目创建实体实现 DbContext 上下文仓储实现服务实现控制器实现服务注册快照注入数据库连接配置1. 注册配置类2. 注入 IOptionsSnapshot<MongoDbSettings>3. 配置文件 appsettings.json 示例…...

JAVA|后端编码规范

目录 零、引言 一、基础 二、集合 三、并发 四、日志 五、安全 零、引言 规范等级&#xff1a; 【强制】&#xff1a;强制遵守&#xff0c;来源于线上历史故障&#xff0c;将通过工具进行检查。【推荐】&#xff1a;推荐遵守&#xff0c;来源于日常代码审查、开发人员反馈…...

重写B站(网页、后端、小程序)

1. 网页端 1.1 框架 Vue ElementUI axios 1.2 框架搭建步骤 搭建Vue 1.3 配置文件 main.js import {createApp} from vue import ElementUi from element-plus import element-plus/dist/index.css; import axios from "axios"; import router from…...

文档债务拖累交付速度?5大优化策略文档自动化

开发者在追求开发速度的过程中&#xff0c;往往会忽视文档的编写&#xff0c;如省略设计文档、代码注释或API文档等。这种做法往往导致在后期调试阶段需要花费三倍以上的时间来理解代码逻辑&#xff0c;进而形成所谓的文档债务&#xff0c;严重拖累交付速度并造成资源浪费。而积…...

【数据结构与算法】LeetCode 每日三题

如果你已经对数据结构与算法略知一二&#xff0c;现在正在复习数据结构与算法的一些重点知识 ------------------------------------------------------------------------------------------------------------------------- 关注我&#x1f308;&#xff0c;每天更新总结文章…...

基于深度学习的电力负荷预测研究

一、深度学习模型框架 在当今数字化时代&#xff0c;基于深度学习的电力负荷预测研究正成为保障电力系统稳定、高效运行的关键领域。其模型构建是一个复杂而精妙的过程&#xff0c;涉及多学科知识与前沿技术的融合应用。首先&#xff0c;要明确电力负荷预测的目标&#xff0c;…...

篇章十 消息持久化(二)

目录 1.消息持久化-创建MessageFileManger类 1.1 创建一个类 1.2 创建关于路径的方法 1.3 定义内部类 1.4 实现消息统计文件读写 1.5 实现创建消息目录和文件 1.6 实现删除消息目录和文件 1.7 实现消息序列化 1. 消息序列化的一些概念&#xff1a; 2. 方案选择&#xf…...

【IDEA】删除/替换文件中所有包含某个字符串的行

目录 前言 正则表达式 示例 使用方法 前言 在日常开发中&#xff0c;频繁地删除无用代码或清理空行是不可避免的操作。许多开发者希望找到一种高效的方式&#xff0c;避免手动选中代码再删除的繁琐过程。 使用正则表达式是处理字符串的一个非常有效的方法。 正则表达式 …...

基于深度学习的不良驾驶行为为识别检测

一.研究目的 随着全球汽车保有量持续增长&#xff0c;交通安全问题日益严峻&#xff0c;由不良驾驶行为&#xff08;如疲劳驾驶、接打电话、急加速/急刹车等&#xff09;引发的交通事故频发&#xff0c;不仅威胁生命财产安全&#xff0c;还加剧交通拥堵与环境污染。传统识别方…...

FD+Mysql的Insert时的字段赋值乱码问题

方法一 FDQuery4.SQL.Text : INSERT INTO 信息表 (中心, 分组) values(:中心,:分组); FDQuery4.Params[0].DataType : ftWideString; //必须加这个数据类型的定义&#xff0c;否则会有乱码 FDQuery4.Params[1].DataType : ftWideString; //ftstring就不行&#xff0c;必须是…...