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 表示支持扩展的正则表达式,本身是不支持部分规则的,如{}
总结
到此这篇关于shell正则表达式新手入门的文章就介绍到这了,更多相关shell正则表达式入门内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!