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

【shell编程入门】正则表达式

 正则表达式

特殊字符描述
[]方括号表达式,表示匹配的字符集合,例如 [0-9][abcde]
()标记子表达式起止位置
*匹配前面的子表达式零或多次
+匹配前面的子表达式一或多次
?匹配前面的子表达式零或一次
\转义字符,除了常用转义外,还有:\b 匹配单词边界;\B 匹配非单词边界等
.匹配除 \n(换行)外的任意单个字符
{}标记限定符表达式的起止。例如 {n} 表示匹配前一子表达式 n 次;{n,} 匹配至少 n 次;{n,m} 匹配 n 至 m 次
|表明前后两项二选一
$匹配字符串的结尾
^匹配字符串的开头,在方括号表达式中表示不接受该方括号表达式中的字符集合

正则表达式实例

 匹配Email地址

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

 ^[a-zA-Z0-9._%+-]+的解释:

  • ^: 表示匹配字符串的开头。
  • [a-zA-Z0-9._%+-]: 是一个字符类,包含了大小写字母(a-zA-Z)、数字(0-9)以及一些特殊字符(._%+-)。
  • +: 表示前面的字符类中的字符可以出现一次或多次。

这个正则表达式的含义是:匹配以大小写字母、数字、点(.)、下划线(_)、百分号(%)、加号(+)或减号(-)开头的字符串。

匹配身份证号码

^(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])([0-2][1-9]|10|20|30|31)\d{3}(\d|X|x)$

^[1-9]\d{5} 是一个正则表达式,用于匹配一个六位的正整数。让我们解释一下这个正则表达式的各个部分:

  • ^: 表示匹配字符串的开头。
  • [1-9]: 匹配第一个字符是1到9之间的任意一个数字。
  • \d: 匹配任意数字(等同于[0-9])。
  • {5}: 表示前一个元素(\d)必须重复出现5次。

 shell脚本与正则表达式结合的实例

 有一个文本文件 data.txt 包含一些数据,每一行都有一个字符串,你想从中提取符合特定条件的数据。

#!/bin/bash# 文件路径
file="data.txt"# 匹配并提取所有包含数字的行
echo "Lines containing numbers:"
grep -E "[0-9]" "$file"# 匹配并提取所有包含邮箱地址的行
echo -e "\nLines containing email addresses:"
grep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" "$file"# 匹配并提取所有包含日期的行 (YYYY-MM-DD)
echo -e "\nLines containing dates (YYYY-MM-DD):"
grep -E "\b\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])\b" "$file"# 匹配并提取所有以"Product:"开头的行,提取产品名称
echo -e "\nProduct names:"
grep -E "^Product: (.+)$" "$file" | sed -E 's/^Product: (.+)$/\1/'# 匹配并提取包含特定关键字的行,并统计其出现次数
keyword="important_keyword"
echo -e "\nLines containing the keyword '$keyword' and their count:"
grep -E "$keyword" "$file" | tee /dev/tty | wc -l

http://www.lryc.cn/news/285851.html

相关文章:

  • 高效火情监测,科技助力森林防火【数字地球开放平台】
  • 第14章_集合与数据结构拓展练习(前序、中序、后序遍历,线性结构,单向链表构建,单向链表及其反转,字符串压缩)
  • WEB前端3D变换效果以及如何应用js代码
  • Linux中的新建用户、切换用户
  • Vue3使用
  • BindingException: Invalid bound statement (not found): xxMapper.deleteBatchIds
  • 开源图床LightPicture搭建本地图片管理系统并实现无公网IP远程访问
  • 黑马苍穹外卖学习Day10
  • [数据结构 - C++] 红黑树RBTree
  • 《WebKit 技术内幕》学习之十(2): 插件与JavaScript扩展
  • 【头歌-数据分析与实践-python】数据分析与实践-python——python基础
  • 【数据库原理】(37)Web与数据库
  • STM32 TIM输出比较、PWM波形
  • React16源码: React中的updateClassComponent的源码实现
  • Mybatis 动态SQL(set)
  • Ubuntu18.04在线镜像仓库配置
  • 多数据源配置H2 Mysql
  • 【ASP.NET Core 基础知识】--路由和请求处理--路由概念(一)
  • 【Unity】RayMarching体积云理论学习
  • 物联网与智慧城市的无界未来:如何打破传统束缚,开启智能生活新篇章
  • nodejs下载安装
  • 从零学Java - Lambda表达式
  • RV1103与FPGA通过MIPI CSI-2实现视频传输,实现网络推流
  • 力扣62. 不同路径
  • 使用Element-Plus 加载style
  • Kafka常见指令及监控程序介绍
  • Docker 仓库管理
  • LeetCode-410.分割数组的最大值
  • Redis和RediSearch的安装及使用
  • 面向对象进阶--接口2