shell正则表达式

参考:
1、https://www.cnblogs.com/EasonJim/p/8282511.html
2、https://baijiahao.baidu.com/s?id=1711110960497011300&wfr=spider&for=pc
3、https://blog.51cto.com/u_14451009/2441677

基本表达式的分类

基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称BREs)
扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称EREs)
Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称PREs)

基本表达式

正则表达式说明实例Basic RegExExtended RegExpython RegExPerl regEx
\转义符,将特殊字符进行转义,忽略其特殊意义a.b匹配a.b,但不能匹配a.b,"."被转义为特殊意义\\\\
.匹配除换行符(‘\n’)之外的任意单个字符(必须存在)(注意:awk 指令中的句点能匹配换行符)a…b可以表示acdb、aaab 、abbbb但不可以表示acb、ab、aba等..(如果要匹配包括“\n”在内的任何一个字符,请使用:‘(^$)|(.)’..(如果要匹配包括“\n”在内的任何一个字符,请使用 ‘[\n]’
*要和通配符区分开,匹配 * 前面一个字符的0个或多个,(没有1个);*后面的字符一要在*前面字符的后面 ;另外*前后字符必须相邻否则匹配不到(如:a*b匹配ab)a*b可以表示ab、aab、b、abababab,但不可以表示acb、ba等;acb只会匹配到b,也就是视为b前面有0个a;ba也只会匹配到b,同样视为b前面有0个a****
^匹配行首,例如’^dog’匹配以字符串dog开头的行(注意:awk 指令中,'^'则是匹配字符串的开始)输入:echo -e "abcd \naccc" | grep "^ab";输出:abcd^^^^
$匹配行尾,例如’cat$‘匹配以字符串cat结尾的行(注意:awk 指令中,’$'则是匹配字符串的结尾)输入:echo -e "abcd \naccc" | grep "cc$" ;输出:accc$$$$
[]表示范围,可以用来进行模糊匹配常用选项为[a-z]、[0-9]1. grep[0-9] text 过滤出含数字的行;2. grep[a-z] text 过滤出含小写字母的行;3. grep [abc] text 过滤出含有a,b,c的行(注意这个abc是分别匹配,也就是相当于匹配含有a的行,b的行,c的行,并不是字符串abc的行)[][][][]
[^]负值字符集合,匹配未包含的任意一个字符(注意:不包括换行符),例如:‘[^abc]’ 可以匹配 “Lay” 中的’L’(注意:[^xyz]在awk 指令中则是匹配未包含的任意一个字符+换行符)echo -e "abc def lmn" | grep [^f-z];输出 abc def lmn,只有[a-e]配匹配到[^][^][^][^]
?匹配前面的子表达式 0 次或 1 次(等价于{0,1})echo -e "a ab abc ac abbc" | egrep ab?c;输出:a ab abc ac abbc (即,匹配ac,abc)不支持(同\?)???
+匹配前面的子表达式 1 次或多次(等价于{1, }),例如:zo+能匹配 "zo"以及 “zoo”,但不能匹配 “z”echo -e “wd wod wood wooood” | egrep wo+d ;输出为:“wd wod wood wooood不支持(同\+)+++
() 匹配表达式,用于创建一个用于匹配的字符串echo -e "tast test tst" | egrep -n 't(a|e)st' ;输出:tast test tst。不支持(但可以使用\(…\),如:\(dog\)()()()
{n}n 必须是一个 0 或者正整数,匹配子表达式 n 次.echo -e "tast test tte ass" | egrep -n [st]{2};匹配输出结果为:“tast test tte ass不支持(同\{n\}){n}{n}{n}
{n,}匹配子表达式的匹配次数必须大于等于 n次,即至少匹配n次。 echo -e "tast test tte ass" | egrep -n "s{2,}";输出为:“tast test tte ass不支持(同\{n,\}){n}{n}{n}
{n,m}匹配子表达式的匹配次数必须大于等于 n次,最多匹配m次。且需要满足你n<=m。echo -e "aaa ass" | egrep -n "a{2,3}";输出:aaa ass。不支持(同\{n,m\}){n,m}{n,m}{n,m}
|交替匹配两边的任意一项,类似于逻辑“或”运算。echo -e "aaa aas ass abc" | egrep -n "a(a|s)s" ;输出为:aaa aas ass abc。不支持(同x\|y)|||

POSIX字符类

正则表达式说明实例Basic RegExExtended RegExpython RegExPerl regEx
[:alnum:]匹配任何一个字母或数字([A-Za-z0-9]),例如:'[[:alnum:]] ’echo -e "abc 123" | grep '[[:alnum:]]' ; 输出:abc 123[:alnum:][:alnum:][:alnum:][:alnum:]
[:alpha:]匹配任何一个字母([A-Za-z]), 例如:’ [[:alpha:]] ’echo -e "abc 123" | grep '[[:alpha:]]' ; 输出:abc 123[:alpha:][:alpha:][:alpha:][:alpha:]
[:digit:]匹配任何一个数字([0-9]),例如:'[[:digit:]] ’echo -e "abc 123" | grep '[[:digit:]]' ;输出为:abc 123[:digit:][:digit:][:digit:][:digit:]
[:lower:]匹配任何一个小写字母([a-z]), 例如:’ [[:lower:]] ’echo -e "abc ABC 123" | grep '[[:lower:]]' ; 输出:abc ABC 123[:lower:][:lower:][:lower:][:lower:]
[:upper:]匹配任何一个大写字母([A-Z]),例如:‘[[:upper:]]’echo -e "abc ABC 123" | grep '[[:upper:]]' ; 输出:abc ABC 123[:upper:][:upper:][:upper:][:upper:]
[:space:]任何一个空白字符: 支持制表符、空格,例如:’ [[:space:]] ’echo -e "abc ABC 123" | grep '[[:space:]]' ;输出为:abc ABC 123[:space:][:space:][:space:][:space:]
[:blank:]空格和制表符(横向和纵向),例如:‘[[:blank:]]‘ó’[\s\t\v]’echo -e "abc ABC 123" | grep '[[:blank:]]' ; 输出为:abc ABC 123[:blank:][:blank:][:blank:][:blank:]
[:graph:]任何一个可以看得见的且可以打印的字符(注意:不包括空格和换行符等),例如:'[[:graph:]] ’echo -e "abc ABC 123" | grep '[[:graph:]]'; 输出:abc ABC 123[:graph:][:graph:][:graph:][:graph:]
[:print:]任何一个可以打印的字符(注意:不包括:[:cntrl:]、字符串结束符’\0’、EOF 文件结束符(-1), 但包括空格符号),例如:'[[:print:]] ’echo -e "abc ABC 123" | grep '[[:print:]]' ;输出:abc ABC 123[:print:][:print:][:print:][:print:]
[:cntrl:]任何一个控制字符(ASCII 字符集中的前 32 个字符,即:用十进制表示为从 0 到31,例如:换行符、制表符等等),例如:’ [[:cntrl:]]’echo -e "abc ABC 123 \t 123" | grep '[[:cntrl:]]' ;输出:abc ABC 123 123[:cntrl:][:cntrl:][:cntrl:][:cntrl:]
[:punct:]任何一个标点符号(不包括:[:alnum:]、[:cntrl:]、[:space:]这些字符集)echo -e "abc.ABC?123+123" | grep '[[:punct:]]'; 输出:abc‘.’ABC’?‘123’?'123[:punct:][:punct:][:punct:][:punct:]
[:xdigit:]任何一个十六进制数(即:0-9,a-f,A-F)echo -e "abc ABC 129 XYZ" | grep '[[:xdigit:]]'; 输出:abc ABC 129 XYZ[:xdigit:][:xdigit:][:xdigit:][:xdigit:]

元字符

正则表达式说明实例Basic RegExExtended RegExpython RegExPerl regEx
\b匹配一个单词边界,也就是指单词和空格间的位置,例如: ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的’er’\bcool\b匹配cool,不匹配coolant\b\b\b\b
\B匹配非单词边界,例如:‘er\B’ 能匹配 “verb” 中的’er’,但不能匹配"never" 中的’er’cool\B匹配coolant,不匹配cool\B\B\B\B
\w匹配包括下划线的任何单词字符(等价于[A-Za-z0-9_])\w匹配1或a,不匹配&\w\w\w\w
\W匹配任何非单词字符 (等价于[^A-Za-z0-9_])\W匹配&,不匹配1或a\W\W\W\W
\d匹配从 0 到 9 中的任意一个数字字符(等价于 [0-9])b\db匹配b2d,不匹配bcd不支持不支持\d\d
\D匹配非数字字符(等价于 [^0-9])b\Db匹配bcd,不匹配b2b不支持不支持\D\D
\s匹配任何空白字符,包括空格、制表符、换页符等等(等价于[ \f\n\r\t\v])x\s匹配x x x,不匹配xx不支持不支持\s\s
\S匹配任何非空白字符(等价于[^\f\n\r\t\v])x\Sx匹配xkx,不匹配x x不支持不支持\S\S
\n匹配一个换行符(等价于 \x0a 和\cJ)\n匹配一个换行符不支持不支持\n\n
\r匹配一个回车符(等价于 \x0d 和\cM)\r匹配回车不支持不支持\r\r
\t匹配一个横向制表符(等价于 \x09和 \cI)\t 匹配一个横向制表符不支持不支持\t\t
\v匹配一个垂直制表符(等价于 \x0b和 \cK)\v匹配一个垂直制表符不支持不支持\v\v
\f匹配一个换页符(等价于\x0c 和\cL)\f匹配一个换页符不支持不支持\f\f
\\匹配转义字符本身"\"\匹配一个转义符\\\\\\\\
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iNBC

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值