shell学习----正则表达式
在使用sed和gawk时如果能够熟练的使用正则表达式,可以准确的过滤到自己需要的信息
Linux中,有两种流行的正则表达式引擎:
- POSIX基础正则表达式,BRE引擎
- POSIX扩展正则表达式,ERE引擎
一、BRE模式
1.1 纯文本
基本上没什么可写的,区分大小写,多个空格也可以匹配。
1.2 特殊字符
正则表达式识别的特殊字符包括这些,如果需要使用特殊字符,需要转义符(\)。
.*[]^${}\+?|()
1.3 锚字符
- 或字符(^)锁定在行首
- 美元符($)锁定在行尾
- 两个组合(^$)可以过滤空行
sed -n '/^this/p' data3
echo "This ^ is a test" | sed -n '/s ^/p' echo "This is a good book" | sed -n '/book$/p'
echo "This book is good" | sed -n '/book$/p' sed -n '/^this is a test$/p' data4
sed '/^$/d' data5
使用例子
1.4 点号字符
匹配除换行符之外的任意单个字符。
sed -n '/.at/p' data6
1.5 字符组
使用方括号来定义字符组
sed -n '/[ch]at/p' data6
echo "Yes" | sed -n '/[Yy]es/p'
1.6 排除型字符组
也可以反转字符组的作用,在字符组的开头加个脱字符
sed -n '/[^ch]at/p' data6
1.7 区间
用破折号可以表示字符中间的内容,第一个字符,破折号,最后一个字符
sed -n '/^[0-9][0-9][0-9][0-9][0-9]$/p' data8
1.8 特殊的字符组
- [[:alpha:]] 匹配任意字母字符,不管是大写还是小写
- [[:alnum:]] 匹配任意字母数字字符0~9、A~Z或a~z
- [[:blank::]] 匹配空格或制表符
- [[:digit:]] 匹配0~9之间的数字
- [[:lower:]] 匹配小写字母字符a~z
- [[:print:]] 匹配仍以可打印字符
- [[:punct:]] 匹配标点符号
- [[:space:]] 匹配任意空白字符:空格、制表符、NL、FF、VT和CR
- [[:upper:]] 匹配任意大写字母字符A~Z
这些表达式可以像普通字符组一样使用。
echo "abc" | sed -n '/[[:digit:]]/p'
echo "abc" | sed -n '/[[:alpha:]]/p'
echo "abc123" | sed -n '/[[:digit:]]/p'
1.9 星号
星号表明该字符必须在匹配模式的文本中出现0次或多次
echo "ik" | sed -n '/ie*k/p'
echo "iek" | sed -n '/ie*k/p'
echo "ieek" | sed -n '/ie*k/p'
echo "ieeek" | sed -n '/ie*k/p'
二、ERE模式
2.1 问号
问号表明前面的字符可以出现0次或1次。
echo "bt" | gawk '/be?t/{print $0}'
bt
echo "bet" | gawk '/be?t/{print $0}'
bet
echo "beet" | gawk '/be?t/{print $0}'
echo "beeet" | gawk '/be?t/{print $0}'
2.2 加号
加号表明前面的字符可以出现1次或多次,但必须至少出现1次。
echo "beeet" | gawk '/be+t/{print $0}'
echo "beet" | gawk '/be+t/{print $0}'
echo "bet" | gawk '/be+t/{print $0}'
2.3 花括号
花括号允许你可重复的正则表达式指定一个上限。这通常成为间隔,可以用两种格式来指定区间。
m:正则表达式准确出现m次。
m,n:正则表达式至少出现m次,至多n次。
echo "bt" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
echo "bat" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
echo "bet" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
2.4 管道符号
就是linux里的|符号,一样的管道。应该是逻辑或的感觉
echo "The cat is asleep" | gawk '/cat|dog/{print $0}'
The cat is asleep
echo "The dog is asleep" | gawk '/cat|dog/{print $0}'
The dog is asleep
echo "The sheep is asleep" | gawk '/cat|dog/{print $0}'
2.5 表达式分组
使用园括号进行分组,当你将正则表达式模式分组时,该组会被视为一个标准字符。
echo "Sat" | gawk '/Sat(urday)?/{print $0}'
Sat
echo "Saturday" | gawk '/Sat(urday)?/{print $0}'
echo "cat" | gawk '/(c|b)a(b|t)/{print $0}'
cat
echo "cab" | gawk '/(c|b)a(b|t)/{print $0}'
cab
echo "bat" | gawk '/(c|b)a(b|t)/{print $0}'
bat
echo "bab" | gawk '/(c|b)a(b|t)/{print $0}'
bab
echo "tab" | gawk '/(c|b)a(b|t)/{print $0}'
echo "tac" | gawk '/(c|b)a(b|t)/{print $0}'
shell学习----正则表达式的更多相关文章
- bash shell学习-正则表达式基础 (笔记)
A gentleman is open-minded and optimistic; a small person is narrow-minded and pessimistic. "君子 ...
- Shell学习之结合正则表达式与通配符的使用(五)
Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- shell学习总结之自定义函数
shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
- shell学习指南-阅读笔记
shell学习指南真不是刚开始学习shell应该看得书,虽然其中讲了简单的linux命令,shell语法等,但是每章也有些深入和生僻地方,我想如果我刚学shell看到这样的地方一定会头疼的要死.或许也 ...
- 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等
1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...
- Shell学习之条件测试(四)
Shell学习之条件测试 目录 逻辑测试 文件测试 数值比较 字符串比较 逻辑测试 格式: [ 表达式 ] 操作符 [ 表达式2 ] …… 命令1 操作符 命令2 …… 常用的操作符 ( 注意:-a和 ...
- Shell学习之环境变量配置文件(三)
Shell学习之环境变量配置文件 目录 环境变量配置文件简介 环境变量配置文件作用 其他配置文件和登录信息 环境变量配置文件简介 环境变量配置文件简介 环境变量配置文件中主要是定义对系统操作环境生效的 ...
随机推荐
- Vue知识整理1:$watch方法的使用
如下图所示:vue中,可以使用$watch方法显示变量的前面值和当前值,方便进行判断.使用方法: vm.$watch('a',function(newval,oldval){ ...... })
- VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT
目录 目录 前文列表 数据块修改跟踪技术 CBT 为虚拟机开启 CBT CBT 修改数据块偏移量获取函数 QueryChangedDiskAreas changeId 一个 QueryChangedD ...
- 关于崩溃报告的日志以及dump文件
在用户使用软件的过程当中突然产生软件崩溃的问题,必须采取相关的措施去拦截崩溃产生的原因,这有助于程序员解决此类崩溃的再次发生.特别是有些难以复现的崩溃,不稳定的崩溃,更有必要去调查崩溃产生的原因.一般 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_7_HashMap存储自定义类型键值
自定义类型做key值.必须要重写hashCode和equals方法 创建pserson类 有name个age两个成员变量.重写toString方法 key有重复,会被新的value值替换掉. key值 ...
- 小程序-web-view嵌入H5页面遇到的bug
遇到的问题1:ios页面中,内容过多时有下滑真是功能,但是下滑的时候回看到底部的微信自带的灰色背景及H5的域名(ios的webview中上/下拉露出黑灰色背景问题) 解决办法:给body添加样式--- ...
- Python解决ModuleNotFoundError: No module named 'Queue'的问题
我们知道Python2和Python3两个版本之间,有些不兼容的地方,Python3中引入Queue会报出这个问题. Python3中要这样引入: import queue Python2中要这样引入 ...
- 第一章:Java语言概述与环境开发
1.计算机高级语言按程序的执行方式可以分为编译型和解释型两种: 2.JAVA程序的执行过程必须经过先编译后解释两个步骤: 3.JAVA语言里负责执行字节码文件的是JAVA虚拟机 (Java Virtu ...
- 003/node.js--代理服务(解决跨域问题)
业务描述: 1.web前端发送http请求 2.web后端为https协议 如何保证web前端发送http请求到web后端(跨域问题:域名不一致即跨域), 因此用node.js写了个代理服务,转发前端 ...
- oracle--少见操作、如何调整dos窗口大小、字符集设置
如何调整dos窗口大小 1.set linesize 400; 2.右键 --默认值 断开.连接 disconn ; conn ww/ww; 关于字符集 操作系统环境变量针对语言项设置有几个,我经常设 ...
- 前端 CSS的选择器 属性选择器
属性选择器,字面意思就是根据标签中的属性,选中当前的标签. 属性选择器 通常在表单控件中 使用比较多 根据属性查找 /*用于选取带有指定属性的元素.*/ <!DOCTYPE html> & ...