六、shell脚本语言开发正则表达式

目录

背景:

1、表达式符号 

2、正则表达式命令工具 

1、grep 

2、awk 

3、sed

特殊字符:

空白符

总结:


背景:

正则表达式在每种语言中都会有,功能就是匹配符合你预期要求的字符串。 Shell 正则表达式分为两种:

基础正则表达式:BRE(basic regular express)

扩展正则表达式:ERE(extend regular express),扩展的表达式有+、?、|和() 下面我们会介绍一些常用的正则表达式符号。

1、表达式符号 

表达式符号作用描述案例
.匹配除换行符(\n)之外的任 意单个字符,可以理解为匹配单个字符

案例:

匹配 123

# echo -e "123\n456" |grep '1.3'
123
^匹配前面字符串开头,就是说匹配开头的字符

案例:

匹配以 abc 开头的行

# echo -e "abc\nxyz" |grep ^abc
abc
$匹配前面字符串结尾,就是说匹配结尾的字符

案例:

匹配以 xyz 结尾的行

# echo -e "abc\nxyz" |grep xyz$
xyz
*匹配前一个字符零个或多个,就匹配多个字符

案例:

匹配 x、xo 和 xoo

[root@~ test]# echo -e "x\nxo\nxoo\no\noo" |grep "xo*"
x
xo
xoo

注:x 是必须的,批量了 0 零个或多个

+匹配前面字符 1 个或多个

案例:

匹配 abc 和 abcc

[root@~ test]# echo -e "abc\nabcc\nadd" |grep -E 'ab+'
abc
abcc

案例:

匹配单个数字

[root@~ test]# echo "113" |grep -o '[0-9]'
1
1
3

案例:

连续匹配多个数字

[root@~ test]# echo "113" | grep -E -o '[0-9]+'
113

匹配前面字符 0 个或 1 个

匹配 ac 或 abc

[root@~ test]# echo -e "ac\nabc\nadd" |grep -E 'a?c'
ac
abc
[ ]匹配中括号之中的任意一个 字符

匹配 a 或 c

[root@~ test]# echo -e "a\nb\nc" |grep '[ac]'
a
c
[ .-.]匹配中括号中范围内的任意 一个字符

匹配所有字母

[root@~ test]# echo -e "a\nb\nc" |grep '[a-z]'
a
b
c
[^]匹配[^字符]之外的任意一 个字符

匹配 a 或 b

[root@~ test]# echo -e "a\nb\nc" |grep '[^c-z]'
a
b

匹配末尾数字

[root@~ test]# echo "abc:cde;123" |grep -E '[^;]+$'
abc:cde;123
^[^]匹配不是中括号内任意一个 字符开头的行

匹配不是#开头的行

[root@~ test]# grep '^[^#]' /etc/passwd
root:x:0:0:root:/root:/bin/bash
{n}或 {n,}匹配花括号前面字符至少 n 个字符

匹配 abc 字符串(至少三个字符以上字符串)

[root@~ test]# echo -e "a\nabc\nc" |grep -E '[a-z]{3}'
abc
{n,m}匹配花括号前面字符至少 n 个字符,最多 m 个字符

匹配 12 和 123(不加边界符会匹配单个字符)

[root@~ test]# echo -e "1\n12\n123\n1234" | grep -E -w -o '[0-9]{2,3}'
12
123
\<边界符,匹配字符串开始

匹配开始是 123 和 1234

[root@~ test]# echo -e "1\n12\n123\n1234" |grep '\<123'
123
1234
\>边界符,匹配字符串结束

匹配结束是 1234

[root@~ test]# echo -e "1\n12\n123\n1234" |grep '4\>'
1234
( )单元或组合:将小括号里面 作为一个组合 分组:匹配小括号中正则表 达式或字符。\n 反向引 用,n 是数字,从 1 开始编号,表示引用第 n 个分组匹 配的内容

单元:匹配 123a 字符串

[root@~ test]# echo "123abc" |grep -E -o '([0-9a-z]){4}'
123a

分组:匹配 11

[root@~ test]# echo "113abc" |grep -E -o '(1)\1'
11

匹配出现 xo 出现零次或多次

[root@~ test]# echo -e "x\nxo\nxoo\no\noo" |egrep "(xo)*"
xo
xoo

|匹配竖杠两边的任意一个

匹配 12 和 123:

[root@~ test]# echo -e "1\n12\n123\n1234" |grep -E '12\>|123\>'
12
123
\转义符,将特殊符号转成原 有意义1.2,匹配 1.2:1\.2,否则 112 也会匹配到

 Posix 字符在shell脚本语言中也会使用到,但是使用的场景非常的少

字符(posix)作用描述等效
[:alnum:]匹配中括号中范围内的任意 一个字符等效[a-z,A-Z,0-9]
[:alpha:]匹配中括号中范围内的任意 一个字符等效[a-z,A-Z]
[:lower:]匹配中括号中范围内的任意 一个字符等效[a-z]
[:upper:]匹配中括号中范围内的任意 一个字符等效[A-Z]
[:digit:]匹配中括号中范围内的任意 一个字符等效[0-9]
[:space:]匹配任意空白字符等效[\t\n\r\f\v]
[:graph:]非空白字符
[:blank:]空格与定位字符
[:cntrl:]控制字符
[:print:]可显示的字符
[:punct:]标点符号字符
[:xdigit:]十六进制

 示例:

[root@~ test]# echo -e "1\n12\n123\n1234a" |grep '[[:digit:]]'
1
12
123
1234a

2、正则表达式命令工具 

在 Shell 脚本语言中使用到的正则表达式处理文本需要使用到各类的命令工具,如grep、awk、sed等等 

1、grep 

默认不支持扩展表达式,加-E 选项开启 ERE。如果不加-E 使用花括号要加 转义符\{\}

egrep:支持基础和扩展表达式,

2、awk 

支持 egrep 所有的正则表达式,需要指定分隔符,主要是做查询操作

3、sed

默认不支持扩展表达式,加-r 选项开启 ERE。如果不加-r 使用花括号要加 转义符\{\},主要用途有查询,替换,更新等操作

 注:

特殊字符:

\w -------------匹配任意数字和字母,等效[a-zA-Z0-9_]

\W -------------与\w 相反,等效[^a-zA-Z0-9_]

\b -------------匹配字符串开始或结束,等效\

\s -------------匹配任意的空白字符

\S -------------匹配非空白字符

空白符

\n ----------------换行符

\r ----------------回车符

\t ----------------水平制表符

\v ----------------垂直制表符

\0 ----------------空值符

\b ----------------退后一格

总结:

以上就是shell的正则表达式需要字符,、格式和命令工具等信息,感谢大家的支持,感谢点赞加关注!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jiang0615csdn

你对鼓励是我最大的动力来源

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

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

打赏作者

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

抵扣说明:

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

余额充值