shell编程--正则表达式

正则表达式

正则表达式都被置于两个正斜杠之间;如/loOve/

示例

匹配数字的脚本,用户输入创建账号的数量

语法: \[ \^\[0-9+$ ]]

表示必须输入数字

复制代码
#!/bin/bash

while :
do
read -p "输入数字:" num
    if [[ $num =~ ^[0-9]+$ ]]
        then
            echo "再见"
            exit
        else
            echo "重新输入"
    fi
done

#!/bin/bash
read -p "你好,请输入姓名:" name

while :
do
read -p "你是傻子吗,请输入 是:" num
    if [ $num = "是"]
        then
            echo "大傻子,$name,再见"
            exit
        else
            echo "重新输入"
    fi
done

元字符

定义

元字符表达不同于字面本身的含义

分类

基本正则

^ 行首定位符
复制代码
# cat /etc/passwd

#找出root
grep root /etc/passwd

#找出行首为root
grep "^root" /etc/passwd
$ 行尾定位符
复制代码
vim 1.txt
i loveyou
love
loveyou

#############################
grep "love$" 1.txt
. 匹配任意单个字符
复制代码
vim 1.txt
abc
adc


###############################
grep a.c 1.txt
* 匹配前导符0次到多次
复制代码
vim 1.txt
a
ab
abc
abcd
abcde
abcdef
gg
hh
ii



########################################

grep "abc*" 1.txt

ab
abc
abcd
abcde
abcdef

#ab后面好想有c,好像也没有,c出现0次到多次

grep "abcde*" 1.txt

abcd
abcde
abcdef

#e出现0次到多次
.* 任意多个字符
复制代码
grep ".*" 1.txt

a
ab
abc
abcd
abcde
abcdef
gg
hh
ii

###################################
为什么*.不可以
*前面没有前导符
匹配指定范围内的一个字符
复制代码
vim 1.txt
love
Love
1love
|ove


#################################################
grep "[lL]ove" 1.txt

love
Love

#取反
grep "[^lL1]ove" 1.txt
|ove


grep "[a-z]ove" 1.txt
love

#####################################################
[0-5][0-9] 匹配00-59
[0-9]匹配0-9
- 匹配指定范围内的一个字符连续的范围
复制代码
[0-9]0到9
[a-z]a到z
[A-Z]A到Z
\^ 匹配不在指定组内的字符

取反

复制代码
[^0-9]非数字
[^a-z]非小写字母
\ 转义符
复制代码
grep "l." 1.txt
love
l.ve


\.  转义.
grep "l\." 1.txt
l.ve


用来转义元字符("" '' \)
''强引用
\< 词首定位符
复制代码
vim 1.txt
iloveyou
love
1love

###############################
grep "\<love" 1.txt
查找以love开头的
\> 词尾定位符
复制代码
grep "love\>" 1.txt
love
查找以love结尾的
() 匹配稍后使用的字符标签

vim末行模式

复制代码
iloveyou
loveyou
1love


:1,2 s/\(.*\)/#\1/
#定位1,2行,s///模式,括号得转义,.*匹配所有字符,\1表示第一次括号引用选中的内容,#表示在定位的1,2行前面加#

192.168.1.1


:%s/192.168.1.1/192.168.2.3/
#s///就是替换,把1.1替换为2.3



192.168.2.2



:% s/\(192\)/123\1/
#在192前面加123
x\{m\} 字符x重复几次
复制代码
love
loove
looove
loooove
looooove
loooooove



grep "o\{3\}" 1.txt
looove
loooove
looooove
loooooove
looooooove
#o重复3符的字符,{}也得转义
x\{m,\} 字符重复出现m次以上
复制代码
grep "0\{3,\}" 1.txt
x\{m,n\} 字符x重复出啊先m到n次
复制代码
grep "o\{3,4\}" 1.txt

行首行尾与词首词尾

复制代码
iloveyou
ilove
loveyou
aaa iloveyou bbb
ccc ilove ddd
eee loveyou fff


####################################
grep "^love" 1.txt
loveyou


grep "\<love" 1.txt
loveyou
eee loveyou fff



grep "love$" 1.txt
ilove

grep "love\>" 1.txt
ilove
ccc ilove ddd

扩展正则元字符

+ 匹配前导符1到n次
复制代码
lve
love
loove
looove

##############################

grep -E
egrep 
这两个可以识别扩展元字符
#################################
egrep lo+ve 1.txt
love
loove
loove


#  *0到多次
? 匹配前导符0到1次
复制代码
egrep "lo?ve" 1.txt
lve
love
a|b 匹配a或b
复制代码
egrep "o|v" 1.txt
lve
love
loove
looove
looove
() 组字符
复制代码
rs
loveable
lovers


##########################################
egrep "love(able|rs)" 1.txt
loveabgle
lovers

egrep "loveable|rs" 1.txt
rs
loveable
lovers
相关推荐
cuijiecheng201810 分钟前
Rocky Linux 安装 libltc、ltc-tools 和 ltcdump
linux
BlueAsia_Lab10 分钟前
BQB 认证执行标准是什么?核心条款通俗解读
linux·运维·网络
YOU OU12 分钟前
多机部署/负载均衡-LoadBalance
运维·负载均衡
小小、码农14 分钟前
【网络】套接字(Socket)编程——TCP版
linux·服务器·网络·c++·网络协议·tcp/ip
邪修king18 分钟前
Re:Linux 系统篇(十六):进程篇(五):O (1) 调度算法深度解析 —— 优先级数组、位图优化与活跃 / 过期双队列
linux·运维·算法
苏三福19 分钟前
ubuntu 在文件管理系统中用sftp打开远程文件空白的问题解决
linux·运维·ubuntu
云飞云共享云桌面22 分钟前
10 人三维研发团队,如何利用单台图形服务器承载 SolidWorks 建模与仿真?
运维·服务器·网络·自动化·制造
邪修king24 分钟前
Re:Linux 系统篇(十四):进程篇(三):进程退出与特殊进程 —— 僵尸 Z 状态、孤儿进程深度解析
linux·运维·服务器
lingran__25 分钟前
Git 完全指南(一):本地仓库基础操作
linux·git·开发工具·devops·版本控制
snow@li28 分钟前
服务器运维:Alibaba Cloud Linux 4 LTS・Vue前端 Java 后端 K3S 部署 CICD 目录规范清单
linux·前端·vue.js