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

SHELL脚本学习(十一)正则表达式

一、锚点字符
1.1 锚点行首

脱字符(^)指出行首位置

$ cat < file1
test line1
test line2
test line3
line4 test#打印所有包括文本 test的行
$ sed -n '/test/p' file1
test line1
test line2
test line3
line4 test#打印所有以test为首的行
$ sed -n '/^test/p' file1
test line1
test line2
test line3
1.2 锚点行尾

美元符号($)指出行尾位置

$ cat < file1
test line1
test line2
test line3
line4 test#打印所有以test结尾的行
$ sed -n '/test$/p' file1
line4 test
二、点字符

点字符(.)能够匹配除换行符之外的所有字符。

$ cat<file
cat
hatat
a t$ sed -n '/.at/p' file
cat
hatat

空格也是一个字符

三、字符组

方括号 [] 用于定义字符组,字符组内的任一字符匹配,即为匹配。

$ cat<file
cat
hatat
a t
ubuntu@VM-8-14-ubuntu:~$ sed -n '/[ch]at/p' file
cat
hat
四、排除型字符组

在字符组前加上脱字符即为排除型字符组。排除型字符组的语义正好和字符组相反,不匹配字符组内的任一字符。


$ cat<file
cat
hatat
a t$ sed -n '/[^ch]at/p' fileat
五、区间

可以单连字符(-)表示区间。即 起始字符-结束字符。

$ sed -n '/[A-Z][Aa][Tt]/p' file
HAT
CAT$ sed -n '/[a-z][Aa][Tt]/p' file
cat
hat

A-Z 表示 当前字符 要匹配单个 大写字母
a-z 表示 当前字符 要匹配单个 小写字母

六、特殊字符

除了定义自己的字符组,BRE(basic regular expression 基础正则表达式)还提供了一些特殊字符组。

BRE特殊字符组
字符组描述
[[ :alpha:]]匹配任意字符字符,a-z A-Z
[[:alnum:]]匹配任意字母数字,z-a A-Z 0-9
[[:blank:]]匹配空格或制表符
[[:digit:]]匹配0-9中的数字
[[:lower:]]匹配小写字母 a-z
[[:print:]]匹配任意可打印字符
[[:punct:]]匹配标点符号
[[:space:]]匹配任意空白符。空格、制表符、换行符、回车等。。。
[[:upper:]]匹配任意大写字母 A-Z

特殊字符组的使用方式和普通字符组一样。

$ cat <file
cat
hatat
a t
HAT
CAT$ sed -n '/[[:upper:]][Aa][Tt]/p' file
HAT
CAT$ sed -n '/[[:lower:]][Aa][Tt]/p' file
cat
hat
七、星号 *

在字符后面加 星号*,表示该字符必须匹配0次或多次。

$ echo "hello" | sed -n '/hel*o/p'
hello
$ echo "heo" | sed -n '/hel*o/p'
heo
$ echo "heto" | sed -n '/hel*o/p'
$ 

相关文章:

  • 机器学习算法的电影推荐系统以及票房预测系统
  • 【mysql 安装启动失败】 没有网下 libssl.so.10 not found 如何解决?
  • 拒绝零散碎片, 一文理清MySQL的各种锁
  • 网络基本概念
  • 驱动开发(三):内核层控制硬件层
  • 英文字母表
  • uniapp运行到模拟器(联想模拟器)
  • 数据结构与算法笔记:基础篇 - 分治算法:谈一谈大规模计算框架MapReduce中的分治思想
  • 苏泊尔超声波清洗机怎么样?苏泊尔、小泽医生、希亦多个维度测评
  • 酱香型白酒派系介绍
  • IntelBroker 黑客声称入侵了苹果公司,窃取了内部工具的源代码
  • Leetcode Java学习记录——代码随想录哈希表篇
  • C++ 线程池
  • 盘点:20个大幅提高效率的开源网络安全工具
  • MongoDB 索引
  • [译] React v16.8: 含有Hooks的版本
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Angular2开发踩坑系列-生产环境编译
  • echarts的各种常用效果展示
  • Git学习与使用心得(1)—— 初始化
  • HTTP请求重发
  • JSDuck 与 AngularJS 融合技巧
  • js对象的深浅拷贝
  • ReactNative开发常用的三方模块
  • SpiderData 2019年2月16日 DApp数据排行榜
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 测试如何在敏捷团队中工作?
  • 从重复到重用
  • 来,膜拜下android roadmap,强大的执行力
  • 漂亮刷新控件-iOS
  • 前端js -- this指向总结。
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 栈实现走出迷宫(C++)
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #Linux(make工具和makefile文件以及makefile语法)
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (离散数学)逻辑连接词
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .describe() python_Python-Win32com-Excel
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .NET Micro Framework 4.2 beta 源码探析
  • .net开发时的诡异问题,button的onclick事件无效
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @JsonFormat 和 @DateTimeFormat 的区别