shell学习----正则表达式
2024-09-05 22:51:32
在使用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判断字符串包含关系的几种方法
- How secure FB Messenger is?
- Logstash 安装与配置
- 第7章 jQuery插件的使用和写法
- PL/SQL 查找1-100之间的素数
- 【转】JavaScript顶级对象参考模型
- A letter to a good guy in USA
- OpenStack 的防火墙规则流程
- 实现IEnumberable接口和IEnumberator
- cmd修改系统时间
- AS问题解决系列3—iCCP: Not recognizing known sRGB profile
- 【Android】广播BrocastReceiver
- 浅谈 non-blocking I/O Multiplexing + poll/epoll 的正确使用
- linux6.2安装mysql
- C++ 11 学习2:空指针(nullptr) 和 基于范围的for循环(Range-based for loops)
- java 基础四
- 线性表(存储结构数组)--Java 实现
- mysql编译好的简单安装
- JaveWeb 公司项目(4)----- Easyui的表单验证
- scala编程第16章学习笔记(4)——List对象的方法
热门文章
- MongoDB学习【三】—MongoDB数据库增删改查
- mysql慢查询解析-linux命令
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_3_转换流的原理
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_5_HashSet存储自定义类型元素
- k8s创建资源
- MFC下一个通用非阻塞的等待执行结束的对话框类
- 【SD系列】SAP SD模块-公司间销售简介
- JavaScript求两点之间相对于Y轴的顺时针旋转角度
- Eigen的aligned_allocator
- Java日志使用slf4j 配置log4j后,有日志文件 但日志文件内容为空