Shell第四章《正则表达式》
一、前言
1.1、名词解释
正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。
在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/就是由正斜杠界定的正则表达式
它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符是最重要的概念。
1.2、工具
被vim、sed、awk、grep调用
1.3、场景
mysql、oracle、php、python ,Apache,Nginx... 需要正则
1.4、回顾
示例
需求
匹配数字的脚本:用户输入创建账号的数量
语法
[[ ^[0-9]+$ ]]
示范
read -p "输入数字才退出: " num
while :
do
if [[ ! $num =~ ^[0-9]+$ ]];then
echo "error enter!"
read -p "输入数字才退出:" num
else
echo "thank you"
exit 1
fi
done
二、元字符
定义:元字符是这样一类字符,它们表达的是不同于字面本身的含义
2.1、基本正则表达式元字符
^ 行首定位符
[root@localhost ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep "^root" /etc/passwd
为什么什么少一行?
root:x:0:0:root:/root:/bin/bash
$ 行尾定位符
love$
. 匹配任意单个字符
[root@localhost ~]# grep abc 1.txt
abc
[root@localhost ~]# grep adc 1.txt
adc
[root@localhost ~]# grep a.c 1.txt
abc
adc
* 匹配前导符0到多次
[root@localhost ~]# cat 1.txt
a
ab
abc
abcd
abcde
abcdef
ggg
hhh
iii
[root@localhost ~]# grep "abc*" 1.txt
ab
abc
abcd
abcde
abcdef
[root@localhost ~]# grep "abcd*" 1.txt
abc
abcd
abcde
abcdef
.* 任意多个字符
[root@localhost ~]# grep ".*" 1.txt
a
ab
abc
abcd
abcde
abcdef
ggg
hhh
iii
[ ] 匹配指定范围内的一个字符
[lL]ove
[root@localhost ~]# cat 1.txt
love
Love
1ove
iove
[root@localhost ~]# grep [lL]ove 1.txt
love
Love
[ - ] 匹配指定范围内的一个字符,连续的范围
[a-z0-9]ove //////[a-Z]=[a-zA-Z]
[root@localhost ~]# cat 1.txt
love
Love
1ove
iove
[root@localhost ~]# grep [0-9] 1.txt
1ove
[root@localhost ~]# grep [a-z]ove 1.txt
love
iove
[root@localhost ~]# grep [a-Z]ove 1.txt
love
Love
iove
[^] 匹配不在指定组内的字符
[^a-z0-9]ove //////取反
[root@localhost ~]# cat 1.txt
love
Love
1ove
iove
[root@localhost ~]# grep "[^a-z]ove" 1.txt
Love
1ove
[root@localhost ~]# grep "[^0-9]ove" 1.txt
love
Love
iove
\ 用来转义元字符 ('' "" \),脱意符
[root@localhost ~]# grep "l." 1.txt
love
l.ve
[root@localhost ~]# grep "l\." 1.txt
l.ve
\< 词首定位符
[root@localhost ~]# grep "love" 1.txt
love
iloveyou
[root@localhost ~]# grep "\<love" 1.txt
love
^ 和 \<的区别
[root@localhost ~]# cat 1.txt
i loveyou
loveyou
[root@localhost ~]# grep "\<love" 1.txt
i loveyou
loveyou
[root@localhost ~]# grep "^love" 1.txt
loveyou
\> 词尾定位符
love\>
() \(..\) 匹配稍后使用的字符的标签
:3,9 s/\(.*\)/#\1/ 加注释
x\{m\} 字符x重复出现m次
[root@localhost ~]# grep o 1.txt
love
loove
looove
[root@localhost ~]# grep "o\{3\}" 1.txt
looove
x\{m,\} 字符x重复出现m次以上
o\{5,\}
x\{m,n\} 字符x重复出现m到n次
o\{5,10\}
[root@localhost ~]# egrep "o{4,5}" 1.txt
oooo
ooooo
ioooo
ooooi
iooooi
[root@localhost ~]# egrep "o{5,5}" 1.txt
ooooo
2.2、扩展正则表达式元字符
+ 匹配1~n个前导字符
[root@localhost ~]# cat 1.txt
lve
love
loove
[root@localhost ~]# egrep lo+ve 1.txt
love
loove
? 匹配0~1个前导字符
[root@localhost ~]# egrep lo?ve tom.sh
love
lve
a|b 匹配a或b
[root@localhost ~]# egrep "o|v" 1.txt
lve
1ove
loove
looove
loeve
love
Love
iloveyou
l.ve
o
oo
ooo
oooo
ooooo
ioooo
ooooi
iooooi
() 组字符
[root@localhost ~]# egrep "loveable|rs" 1.txt
rs
loveable
lovers
[root@localhost ~]# egrep "love(able|rs)" 1.txt
loveable
lovers
Shell第四章《正则表达式》的更多相关文章
- Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具
摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作.第四章总共介绍了约30种处理文本文件的好用工具. 第三章 查找与替换 概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本 ...
- 第四章:更多的bash shell命令
第四章:更多的bash shell命令 监测程序 ps (其他ps内容见#1 ) Unix风格的ps命令参数 参数 描述 -A 显示所有进程 -N 显示与指定参数不符的所有进程 -a 显示除控制进程( ...
- [转]Windows Shell 编程 第四章 【来源 http://blog.csdn.net/wangqiulin123456/article/details/7987933】
第四章 文件的本质 以前,所有文件和目录都有一个确定的属性集:时间,日期,尺寸,以及表示‘只读的’,‘隐藏的,‘存档的’,或‘系统的’状态标志.然而,Windos95(及后来的WindowsNT4.0 ...
- [Python笔记][第四章Python正则表达式]
2016/1/28学习内容 第四章 Python字符串与正则表达式之正则表达式 正则表达式是字符串处理的有力工具和技术,正则表达式使用预定义的特定模式去匹配一类具有共同特征的字符串,主要用于字符串处理 ...
- 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记
第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...
- python全栈开发中级班全程笔记(第二模块、第四章(三、re 正则表达式))
python全栈开发笔记第二模块 第四章 :常用模块(第三部分) 一.正则表达式的作用与方法 正则表达式是什么呢?一个问题带来正则表达式的重要性和作用 有一个需求 : 从文件中读取所有联 ...
- Linux Shell编程第3章——正则表达式
目录 正则表达式基础 正则表达式的扩展 通配 grep命令 正则表达式基础 Linux Shell以字符串作为表达式向系统传达意思.元字符(Metacharacters)是用来阐述字符表达式意义的字符 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- apue第四章学习总结
apue第四章学习总结 4.1.若以stat函数去替换lstat函数,会发生: 原来的目录路径: $:~/workspace/apue2/include$ ls -l apue.h abc lrwxr ...
随机推荐
- SAP APO-供应网络计划
供应网络计划整合了供应链中的所有流程-采购,制造和分销. 供应网络计划可以优化采购和生产,缩短订单完成时间,并改善客户服务. 供应网络计划与高级计划和优化的其他过程紧密集成,以开发用于购买,制造和分配 ...
- centos 7安装gitlab及使用
GitLab 概述: 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web界面迚行访问公开的戒者私人项目.Ruby on Rails 是一个可 ...
- 用console画条龙?
相识 console一定是各位前端er最熟悉的小伙伴了,无论是console控制台,还是console对象,做前端做久了,打开一个网页总是莫名自然的顺手打开控制台,有些调皮的网站还会故意在控制台输出一 ...
- colab解压.tar.gz文件指令
!tar -zxvf flower_photos.tar.gz 成功后如图:
- 女朋友说:你要搞懂了MySQL三大日志,我就让你嘿嘿嘿!
1. 背景 MySQL实现事务.崩溃恢复.集群的主从复制,底层都离不开日志,所以日志是MySQL的精华所在.只有了解MySQL日志,才算是彻底搞懂MySQL. 今天一灯就带你深入浅出的学习MySQL的 ...
- NC16649 [NOIP2005]校门外的树
NC16649 [NOIP2005]校门外的树 题目 题目描述 某校大门外长度为 \(L\) 的马路上有一排树,每两棵相邻的树之间的间隔都是 \(1\) 米.我们可以把马路看成一个数轴,马路的一端在数 ...
- 基于POM---UI测试框架
为什么会出现这个半自动化UI测试框架 我进入公司的前一个月从事的手工测试,为了提高自己的测试效率在工作时间之外写了一个半自动化的UI测试(害怕手工测试做久了,忘记自己还学过软件开发), 为什么我把它叫 ...
- CentOS查看操作系统安装时间信息:
CentOS查看系统安装时间信息: 方法1:[root@logserver ~]# ll /boot/|egrep -i "(grub|lost\+found)" 方法2:[ro ...
- Proxmox6.2简单配置
刻录: 使用rufus+GPT+DD方式写入U盘 一.更换国内源: 1)删除企业源 mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/so ...
- AtCoder Beginner Contest 249 E - RLE // 动态规划 + 前缀和优化
传送门:E - RLE (atcoder.jp) 题意: 求满足原长为N且转换后长度严格小于N条件的小写字母组成的字符串的数量,输出时对P取模. 其中,转换规则为,将连续相同的字串替换为"字 ...