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

shell 正则表达式

文章目录

  • 前言
  • 一、基础概念
    • 1. 正则表达式类型
    • 2. 常用元字符
  • 二、字符类
    • 1. 预定义字符类
    • 2. POSIX字符类
  • 三、Shell工具中的正则应用
    • 1. grep
    • 2. sed
    • 3. awk
  • 四、实用正则模式
    • 1. 常见匹配模式
    • 2. 高级技巧
  • 五、性能优化建议
  • 六、调试技巧


前言

正则表达式是文本处理的强大工具,在Shell脚本中广泛使用。本文将全面介绍Shell中常用的正则表达式语法、工具和实际应用。


一、基础概念

1. 正则表达式类型

基本正则表达式(BRE):grep, sed 默认使用

扩展正则表达式(ERE):grep -E, egrep, awk 使用

Perl兼容正则(PCRE):grep -P (部分系统支持)

2. 常用元字符

在这里插入图片描述

二、字符类

1. 预定义字符类

在这里插入图片描述

2. POSIX字符类

在这里插入图片描述

三、Shell工具中的正则应用

1. grep

# 基本用法
grep 'pattern' file.txt# 常用选项
grep -i 'pattern' file.txt  # 忽略大小写
grep -v 'pattern' file.txt  # 反向匹配
grep -n 'pattern' file.txt  # 显示行号
grep -c 'pattern' file.txt  # 统计匹配行数
grep -o 'pattern' file.txt  # 只输出匹配部分
grep -E 'pattern' file.txt  # 使用扩展正则
grep -P 'pattern' file.txt  # 使用PCRE正则(部分系统)# 示例
grep '^[A-Z]' file.txt      # 匹配以大写字母开头的行
grep '[0-9]{3}-[0-9]{4}' file.txt  # 匹配电话号码

2. sed

# 基本用法
sed 's/pattern/replacement/' file.txt# 常用选项
sed -n '5p' file.txt        # 打印第5行
sed -i 's/old/new/g' file.txt # 直接修改文件
sed '/pattern/d' file.txt   # 删除匹配行# 示例
sed 's/[0-9]\+/**NUM**/g' file.txt  # 替换所有数字
sed -E 's/([a-z])([A-Z])/\1 \2/g' file.txt  # 在小写和大写字母间加空格

3. awk

# 基本用法awk '/pattern/{action}' file.txt# 示例
awk '/^[A-Z]/{print $0}' file.txt  # 打印以大写字母开头的行
awk '$3 ~ /^[0-9]+$/{print $1}' file.txt  # 打印第3列为数字的行的第1列
awk 'BEGIN{FS=":"; OFS="-"}{print $1,$NF}' /etc/passwd  # 修改输入输出分隔符

四、实用正则模式

1. 常见匹配模式

用途	                 正则表达式
邮箱地址	             \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b
URL 	             `(https?	ftp)://[^\s/$.?#].[^\s]*`
IP地址	             \b(?:\d{1,3}\.){3}\d{1,3}\b
日期(YYYY-MM-DD)	    `\d{4}-(0[1-9]	1[0-2])-(0[1-9]	[12][0-9]	3[01])`
时间(HH:MM:SS)	    `([01][0-9]	2[0-3]):[0-5][0-9]:[0-5][0-9]`
HTML标签	            `<([a-z]+)([^<]+)(?:>(.)</\1>	\s+/>)`
信用卡号          	\b(?:\d[ -]*?){13,16}\b

2. 高级技巧

非贪婪匹配 (PCRE)

echo "<div>content</div>" | grep -Po '<div>.*?</div>'

后向引用

echo "hello hello" | sed -E 's/(hello) \1/\1 world/'

条件匹配

awk '/start/{flag=1} flag; /end/{flag=0}' file.txt

多行匹配

grep -Pzo '(?s)start.*?end' file.txt

五、性能优化建议

尽量使用具体匹配而非.*

优先使用字符类[abc]而非选择a|b|c

合理使用锚点^和$限定范围

避免过度使用捕获组()

对于复杂匹配,考虑分步处理

六、调试技巧

使用grep --color=auto高亮显示匹配

在线正则测试工具辅助开发

分步构建复杂正则表达式

使用echo $?检查上一条命令的退出状态

http://www.dtcms.com/a/296528.html

相关文章:

  • Golang 语言中的指针介绍
  • 高版本Android跨应用广播通信实例
  • 40、鸿蒙Harmony Next开发:UI场景化-组件截图(ComponentSnapshot)
  • C++第一节课入门
  • Qt 元对象系统(Meta-Object System)解析
  • 前端安全问题怎么解决
  • 企业资产管理智能化:IT运维如何借力数字化管理提效避坑?
  • 配置DNS服务的正反向解析
  • 详解FreeRTOS开发过程(六)-- 队列
  • ESP32- 项目应用1 智能手表之更新时间 #3
  • Linux系统常用命令
  • 浅析飞算JavaAI “撤回需求” 功能:让需求管理更灵活
  • 【C++】类和对象(中)
  • 【三桥君】Windows系统如何临时关闭“Windows安全中心实时保护”?解析Win10和Win11关闭方法
  • C++中std::string和std::string_view使用详解和示例
  • Lua(字符串)
  • 生成式人工智能展望报告-欧盟-03-经济影响
  • pyautogui 置信度问题
  • 拖拽同时支持Y轴滚动
  • 开立医疗2026年校园招聘
  • openbmc 日志系统继续分析
  • 行为型模式-协作与交互机制
  • 华为仓颉编程语言的表达式及其特点
  • mac llama_index agent算术式子计算示例
  • 力扣刷题(第九十七天)
  • 强化学习入门三(SARSA)
  • 专题:2025微短剧行业生态构建与跨界融合研究报告|附100+份报告PDF汇总下载
  • LeetCode 1695.删除子数组的最大得分:滑动窗口(哈希表)
  • 07 RK3568 Debian11 网络优先级
  • “抓了个寂寞”:一次实时信息采集的意外和修复