shell——正则表达式入门

目录

一、常规匹配

二、特殊字符

^

[](#)

.

*

字符区间

[\](#)

三、示例


shell中总是会需要对文本字符串做各种各样的剪切拼接等操作,除了 basename 和 dirname 这种简单的函数外,还可以用正则表达式,定义模糊匹配的筛选规则

一、常规匹配

管道操作就是一种匹配方式,如用来查找用户:

[root@hadoop-master ~]# cat /etc/passwd | grep zxd
zxd:x:1001:1001::/home/zxd:/bin/bash

二、特殊字符

正则的强大就是因为可以使用各种各样的特殊字符

^

匹配一行的开头,如 ^ab 表示以 ab 开头的所有行

[root@hadoop-master etc]# cat /etc/passwd | grep ^h
halt:x:7:0:halt:/sbin:/sbin/halt
hue:x:1000:1000::/home/hue:/bin/bash

$

匹配一行的结束,如 zxd$ 表示以 zxd 结尾的所有行

[root@hadoop-master etc]# cat /etc/passwd | grep t$
halt:x:7:0:halt:/sbin:/sbin/halt

一起使用 ^abc,会匹配 abc,使用\^会匹配空行,加上-n参数会显示行号

[root@hadoop-master daily_archive_func]# cat daily_archive_func.sh | grep -n ^$
2:
9:
18:
22:
25:
29:
33:
41:
43:
44:
45:
46:

.

匹配一个任意的字符,如a..b会显示包含a某某b的所有行

[root@hadoop-master etc]# cat passwd | grep -n r..t
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

*

不单独使用,与上一个字符连用,表示匹配上一个字符连续出现0次,1次或多次,如ro*t会匹配rt、rot、root、rooot。。。等所在的所有行

.*:任意字符出现任意次,空字符串也能匹配到

[root@hadoop-master etc]# cat passwd | grep -n ^z.*bash$
23:zxd:x:1001:1001::/home/zxd:/bin/bash

字符区间

[ ] 表示匹配某个范围内的一个字符

[6,8]------匹配 6 或者8

[0-9]------匹配一个0-9 的数字

[0-9]*------匹配任意长度的数字字符串

[a-z]------匹配一个 a-z 之间的字符

[a-z]* ------匹配任意长度的字母字符串

[a-c, e-f]-匹配 a-c 或者 e-f 之间的任意字符

\

\表示转义,并不会单独使用。由于所有特殊字符都有其特定匹配模式,而我们刚好想匹配特殊字符本身时,就会碰到困难。

此时我们就要 将转义字符和特殊字符连用,再加上单引号引起来,来表示特殊字符本身,例如一个对于脚本,找出所有包含 '$' 的行

三、示例

正则匹配手机号

注意点:shell中的 -E 表示支持扩展的正则表达式,本身是不支持部分规则的,如{}

相关推荐
玉言心5 小时前
正则表达式学习
正则表达式
幽兰的天空5 小时前
【Python】正则表达式
python·正则表达式
dawn1912285 小时前
Java 中的正则表达式详解
java·开发语言·算法·正则表达式·1024程序员节
MarkHD2 天前
第七天 正则表达式
正则表达式
史努比的大头3 天前
正则表达式基础知识
正则表达式
Katherine10293 天前
正则表达式笔记
笔记·正则表达式·1024程序员节
IT猫咪酱3 天前
【mysql】转义字符反斜杠,正则表达式
正则表达式
阿智智3 天前
正则表达式使用举例一(Python下)
python·正则表达式·re包
炫彩@之星4 天前
Sublime Text3快捷键大全--正则表达式元字符-详细说明
网络安全·正则表达式·sublime text·安全测试
l23456789o4 天前
java使用正则表达式校验字符串pwd,是否符合包含大写小写数字特殊字符长度超过8位
java·开发语言·正则表达式