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. 测试优先:在处理重要文件前,先用小样本测试正则表达式

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

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

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

相关文章

你通俗易懂的理解——线程、多线程与线程池

一:异常处理 1.1 异常概述 (1)场景 (2)定义 (3)异常抛出机制 Java把不同的异常用不同的类表示 (4)如何对待异常 1.2 常见异常类 (1)Throwable &am…

w~自动驾驶~合集13

我自己的原文哦~ https://blog.51cto.com/whaosoft/13933252 # 小米智能驾驶技术的一些猜测 来蹭一下小米汽车智能驾驶的热度,昨晚听了雷总小米汽车的发布,心潮澎湃寻思下单一辆奈何现实不允许hhh。 言归正传吧, 本来是想主要听一下小米…

AI 面试帮 开发日志

项目源码 https://cnb.cool/szu/TravelBest/Platform/-/tree/main 文章目录 架构微服务网络通信延迟 中间件redisMongoDB 架构 微服务 优点: 模块间解耦、职责清晰,独立部署与扩展,单个服务故障不会影响整个系统,便于持续交付与…

论文阅读(四):Agglomerative Transformer for Human-Object Interaction Detection

论文来源:ICCV(2023) 项目地址:https://github.com/six6607/AGER.git 1.研究背景 人机交互(HOI)检测需要同时定位人与物体对并识别其交互关系,核心挑战在于区分相似交互的细微视觉差异&#…

部署java项目

1.编写shell脚本部署服务 restart.sh #!/bin/bash # # start the user program # echo "-------------------- start jk service --------------------" LOG_DIR"/home/joy/usr/app/ers-log" LOG_FILE"$LOG_DIR/log_$(date "%Y%m%d").txt&…

第18天-NumPy + Pandas + Matplotlib多维度直方图

示例1:带样式的柱状图 python 复制 下载 import numpy as np import pandas as pd import matplotlib.pyplot as plt# 生成数据 df = pd.DataFrame(np.random.randint(10, 100, size=(8, 4)),columns=[Spring, Summer, Autumn, Winter],index=[2015, 2016, 2017, 2018, 20…

关于 Web 安全实践:4. 文件上传功能的风险分析与防护

定义:文件上传风险点是指应用程序允许用户上传文件,但没有严格校验上传文件的类型、内容、路径等属性,导致攻击者可以上传并执行恶意代码。 绕过方式: 前端绕过 1. 前端限制的原理 前端限制上传文件类型的常见方式有三种&#…

升级SpringBoot2到3导致的WebServices升级

背景 WebServices 是基于开放标准(XML、SOAP、HTTP 等)的 Web 应用程序,它们与其他 Web 应 用程序交互以交换数据。WebServices 可以将您现有的应用程序转换为 Web 应用程序。 老代码中有一个19年前的包,由于漏洞原因,…

Vue3中插槽, pinia的安装和使用(超详细教程)

1. 插槽 插槽是指, 将一个组件的代码片段, 引入到另一个组件。 1.1 匿名插槽 通过简单的案例来学习匿名插槽,案例说明,在父组件App.vue中导入了子组件Son1.vue,父组件引用子组件的位置添加了一个片段,比如h2标签,然…

【Redis】AOF日志

目录 1、背景2、工作原理3、核心配置参数4、优缺点5、AOF文件内容 1、背景 AOF(Append Only File)是redis提供的持久化机制之一,它通过记录所有修改数据库状态的写命令来实现数据库持久化。与RDB(快照)方式不同&#…

【HTTP】connectionRequestTimeout与connectTimeout的本质区别

今天发现有的伙伴调用第三方 httpclient 的配置中 connectTimeout 和 connectionRequestTimeout 配置的不到 1 S,问了一下他,知不知道这两个参数的意思,他说不知道。那我们今天就来了解一下这两个参数的区别 一、核心概念解析 1.1 connectT…

react中运行 npm run dev 报错,提示vite.config.js出现错误 @esbuild/win32-x64

在React项目中运行npm run dev时,如果遇到vite.config.js报错,提示esbuild/win32-x64在另一个平台中被使用,通常是由于依赖冲突或缓存问题导致的。解决方法是删除node_modules文件夹,并重新安装依赖。 如下图: 解决办…

EMQX开源版安装指南:Linux/Windows全攻略

EMQX开源版安装教程-linux/windows 因最近自己需要使用MQTT,需要搭建一个MQTT服务器,所以想到了很久以前用到的EMQX。但是当时的EMQX使用的是开源版的,在官网可以直接下载。而现在再次打开官网时发现怎么也找不大开源版本了,所以…

Python:操作Excel按行写入

Python按行写入Excel数据,5种实用方法大揭秘! 在日常的数据处理和分析工作中,我们经常需要将数据写入到Excel文件中。Python作为一门强大的编程语言,提供了多种库和方法来实现将数据按行写入Excel文件的功能。本文将详细介绍5种常见的Python按行写入Excel数据的方法,并附上…

vue3中RouterView配合KeepAlive实现组件缓存

KeepAlive组件缓存 为什么需要组件缓存代码展示缓存效果为什么不用v-if 为什么需要组件缓存 业务需求&#xff1a;一般是列表页面通过路由跳转到详情页&#xff0c;跳转回来时&#xff0c;需要列表页面展示上次展示的内容 代码展示 App.vue入口 <script setup lang"…

【JAVA】比较器Comparator与自然排序(28)

JAVA 核心知识点详细解释 Java中比较器Comparator的概念和使用方法 概念 Comparator 是 Java 中的一个函数式接口,位于 java.util 包下。它用于定义对象之间的比较规则,允许我们根据自定义的逻辑对对象进行排序。与对象的自然排序(实现 Comparable 接口)不同,Comparat…

浪潮服务器配置RAID和JBOD

目录 1 配置RAID2 设置硬盘为JBOD模式3 验证结果 1 配置RAID 进入 bios 界面 选择 “高级” - “UEFI-HII配置” 选择 raid 卡 进入 Main Menu 点击 Driver Management&#xff0c;可以查询当前硬盘 返回上一级&#xff0c;点击 Configuration Management - Create virtu…

mongodb管理工具的使用

环境&#xff1a; 远程服务器的操作系统&#xff1a;centOS stream 9; mongoDB version:8.0; 本地电脑 navicat premium 17.2 ; 宝塔上安装了mongoDB 目的&#xff1a;通过本地的navicat链接mongoDB,如何打通链接&#xff0c;分2步&#xff1a; 第一步&#xff1a;宝塔-&…

03-Web后端基础(Maven基础)

1. 初始Maven 1.1 介绍 Maven 是一款用于管理和构建Java项目的工具&#xff0c;是Apache旗下的一个开源项目 。 Apache 软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受欢迎的开源软件基金会&#xff0c;也是一个专门为支持开源项目而生的非盈利性…

实景VR展厅制作流程与众趣科技实景VR展厅应用

实景VR展厅制作是一种利用虚拟现实技术将现实世界中的展览空间数字化并在线上重现的技术。 这种技术通过三维重建和扫描等手段&#xff0c;将线下展馆的场景、展品和信息以三维形式搬到云端数字空间&#xff0c;从而实现更加直观、立体的展示效果。在制作过程中&#xff0c;首…