Linux入门基础—正则表达式详解
正则表达式是用来匹配字符串的,针对文件内容的文本过滤工具里,大都用到正则表达式,如vi,grep,awk,sed等。
定义
由特殊的字符或者文件编写的模式,其中的字符和文本并不是字面意思,而是表示控制或者通配功能
Linux入门基础—正则表达式详解
分类
基本正则表达式 BRE
字符匹配
匹配任意单个字符 . 匹配范围内的任意单个字符 **[] 匹配范围外的任意单个字符 **[^]
匹配任意单个字母 [[:alpha:]] 匹配任意单个数字 [0-9] [[:digit:]] 匹配任意单个字母或数字 [0-9a-z] [[:alnum:]] 匹配所有大写字母 [[:upper:]] 匹配所有小写字母 [a-z] [[:lower:]] 匹配标点符号 [[:punct:]] 匹配空白字符 [[:space:]]
匹配次数
匹配其前面的任意字符任意次数(0次、1次、多次)*
匹配任意长度的任意字符 .*
匹配其前面的字符至多1次(0次、1次)\?
匹配其前面的字符至少1次(1次、多次)\+
匹配其前面字符m次 \{m\}
匹配其前面字符至少m次至多n次 \{m,n\}
匹配其前面字符至多n次 \{0,n\}
匹配其前面字符至少m次 \{m,\}
练习
准备文件
[root@localhost ~]# cat a.txt
abxy
aby
xxxxxy
yab
演示
[root@localhost ~]# grep x*y a.txt
abxy
aby
xxxxxy
yab
[root@localhost ~]# grep "x\?y" a.txt
abxy
aby
xxxxxy
yab
[root@localhost ~]# grep "x\+y" a.txt
abxy
xxxxxy
[root@localhost ~]# grep "x\{1\}y" a.txt
abxy
xxxxxy
位置锚定
行首锚定 ^
行尾锚定 $
PATTERN匹配整行 ^pattern$
空白行 ^$
空行或包含空白字符的行 ^[[space]]*$
单词:非特殊字符组成的连续字符(字符串)都称为单词
词首锚定 \<
或 \b
词尾锚定 \>
或 \b
匹配完整单词 \
练习
显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v "/bin/bash$" /etc/passwd
找出/etc/passwd文件中的两位数或三位数
grep "\<[0-9]\{2,3\}\>" /etc/passwd
找出/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行
grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
找出ifconfig中的ip地址
ifconfig ens33 | grep -Eo "(\<[0-9]{1,3}\>\.){3}\<[0-9]{1,3}\>" | head -1
分组及引用(后项引用)
\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理 \(abc\)\(123\)\(ybc\) 命令行中括号有特殊意义所以用转义符 分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为: \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符 abc \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符 123 \3:模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符 456
示例
[root@localhost ~]# cat file1
He loves his lover.
He likes his lover.
She likes her liker.
She lover her liker.
id name score
1 liming 1
2 zhangkai 2
3 taotao 100
[root@zycentos7 ~]# grep "\(l..e\).*\1" file1
[root@zycentos7 ~]# grep "\([0-9]\).*\1" file1
扩展正则表达式 ERE
扩展正则表达式与基本正则表达式基本相同,用法相似,除了词首、词尾锚定一样,其他只是在基本正则表达式中去掉转义字符
与基本正则表达式的比较:写法上比较简单,去掉了大量的转义字符;但需要匹配特殊字符时,扩展正则表达式需将特殊字符用 [ ] 括起来使用,这时用基本正则表达式比较方便
分类 | 表达式 | 含义 |
---|---|---|
字符匹配 | . | 任意单个字符 |
[ ] | 指定范围内的任意单个字符 | |
[^] | 指定范围内的任意单个字符 | |
匹配次数 | * | 任意次:0,1或多次 |
? | 0次或者1次 | |
+ | 其前字符至少出现1次 | |
{m} | 其前的字符出现m次 | |
{m,n} | 至少m次,至多n次 | |
{0,n} | 至多n次 | |
{m,} | 至少m次 | |
位置锚定 | ^ | 行首锚定 |
$ | 行尾锚定 | |
<,\b | 词首锚定 | |
>,\b | 词尾锚定 | |
分组及引用 | () | 括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中 |
()……\1 | 引用 | |
a|b | a或者b |
------本页内容已结束,喜欢请分享------
相关文章
- Linux 基础:案例深入解析linux NFS机制
- 阅读器Linux下的福昕PDF阅读技术实现(linux福昕pdf)
- Linux基础入门:打开一扇通向技术之门(linux基础入门)
- Linux调整文件系统:从实用主义到艺术化(linux设置文件系统)
- 走进鸟哥的Linux私房菜基础之旅(鸟哥的linux私房菜基础篇)
- Linux进程管理:从基础到全方位(linux进程详解)
- Linux开发基础指南:掌握一切必备技能(linux开发基础)
- 以Linux为基础创建根目录的指南(linux创建根目录)
- Linux内核软中断处理机制(linux内核软中断)
- Linux分支:探索开源世界的新路(linux的分支)
- Linux的发展分支:从基础到前沿(linux的分支)
- Linux的发展之路:从基础分支到多元拓展(linux的分支)
- Linux下基础任务容易上手!(linux累不累)
- 让Linux掌控网络:使用代理服务器(linux网络代理)
- 系统Linux分支系统:从基础到高级(linux的分支)
- Linux的分支:从基础构建到高级管理(linux的分支)
- Linux基础视频教程:学习更快速的进阶之路(linux基础视频教程)
- Linux安装Dota2:简单快捷的操作步骤(linux安装dota2)
- 开源之旅:了解Linux发行版的分类(linux的种类)
- Linux 入门教材:轻松学会操作系统基础!(linux入门教材)
- 使用Linux正则表达式实现快速删除(linux+正则删除)
- 开放的微笑:豌豆荚与 Linux的完美结合(豌豆荚 linux)
- 如何使用Linux拷贝文件(linux 怎么拷贝文件)
- Linux安装根用户:从基础到高级(linux安装root)
- Linux内核IOCTL技术剖析(linux内核ioctl)