Shell第四章《正则表达式》

博客 分享
0 154
张三
张三 2022-09-04 16:04:02
悬赏:0 积分 收藏

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 "输入数字才退出:  " numwhile :doif [[ ! $num =~ ^[0-9]+$ ]];then        echo "error enter!"        read -p "输入数字才退出:" numelse        echo "thank you"        exit 1fidone

二、元字符 

定义:元字符是这样一类字符,它们表达的是不同于字面本身的含义

2.1、基本正则表达式元字符

^   行首定位符

[root@localhost ~]# grep "root" /etc/passwdroot:x:0:0:root:/root:/bin/bashoperator: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.txtabc[root@localhost ~]# grep adc 1.txtadc[root@localhost ~]# grep a.c 1.txtabcadc

 匹配前导符0到多次

[root@localhost ~]# cat 1.txt aababcabcdabcdeabcdefggghhhiii[root@localhost ~]# grep "abc*" 1.txt ababcabcdabcdeabcdef[root@localhost ~]# grep "abcd*" 1.txt abcabcdabcdeabcdef

.*   任意多个字符

[root@localhost ~]# grep ".*" 1.txt aababcabcdabcdeabcdefggghhhiii

[ ]   匹配指定范围内的一个字符

[lL]ove[root@localhost ~]# cat 1.txt loveLove1oveiove[root@localhost ~]# grep [lL]ove 1.txt loveLove

[ - ]   匹配指定范围内的一个字符,连续的范围

[a-z0-9]ove         //////[a-Z]=[a-zA-Z]	[root@localhost ~]# cat 1.txt loveLove1oveiove[root@localhost ~]# grep [0-9] 1.txt 1ove[root@localhost ~]# grep [a-z]ove 1.txt loveiove[root@localhost ~]# grep [a-Z]ove 1.txt loveLoveiove

[^]   匹配不在指定组内的字符

[^a-z0-9]ove          //////取反	[root@localhost ~]# cat 1.txt loveLove1oveiove[root@localhost ~]# grep "[^a-z]ove" 1.txt Love1ove[root@localhost ~]# grep "[^0-9]ove" 1.txt loveLoveiove

\   用来转义元字符    (''   ""    \),脱意符

[root@localhost ~]# grep "l." 1.txt lovel.ve[root@localhost ~]# grep "l\." 1.txt l.ve

\<   词首定位符

[root@localhost ~]# grep "love" 1.txt loveiloveyou[root@localhost ~]# grep "\<love" 1.txt love

^  和  \<的区别

[root@localhost ~]# cat 1.txt i loveyouloveyou[root@localhost ~]# grep "\<love" 1.txt i loveyouloveyou[root@localhost ~]# grep "^love" 1.txt loveyou

\>   词尾定位符

love\>

()   \(..\)   匹配稍后使用的字符的标签

:3,9 s/\(.*\)/#\1/	加注释

x\{m\}   字符x重复出现m次 

[root@localhost ~]# grep o 1.txtloveloovelooove[root@localhost ~]# grep "o\{3\}" 1.txtlooove

x\{m,\}   字符x重复出现m次以上

 o\{5,\}

x\{m,n\}   字符x重复出现m到n次

o\{5,10\}	[root@localhost ~]# egrep "o{4,5}" 1.txt oooooooooiooooooooiiooooi[root@localhost ~]# egrep "o{5,5}" 1.txt ooooo

2.2、扩展正则表达式元字符

+   匹配1~n个前导字符

[root@localhost ~]# cat 1.txtlveloveloove[root@localhost ~]# egrep lo+ve 1.txtloveloove

?   匹配0~1个前导字符

[root@localhost ~]# egrep lo?ve tom.sh lovelve

a|b   匹配a或b

[root@localhost ~]# egrep "o|v" 1.txt lve1ovelooveloooveloeveloveLoveiloveyoul.veoooooooooooooooiooooooooiiooooi

()   组字符

[root@localhost ~]# egrep "loveable|rs" 1.txt rsloveablelovers[root@localhost ~]# egrep "love(able|rs)" 1.txt loveablelovers
posted @ 2022-09-04 15:43 我真的兔了 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员