您的位置:首页 > 运维架构 > Shell

shell脚本编程(一)正则表达式

2017-12-30 14:01 801 查看
正则表达式

文本查找

grep egrep fgrep

grep:根据模式搜索文本,并将符合模式的文本行显示出来,只显示包含文本内容的行

-i          忽略大小写
--color     高亮文本
-v          反向查找显示没有被模式匹配的行,匹配到的不显示
-o          只显示被模式匹配的串


alias grep='grep --color'   #命令取别名


[~]#grep 'openstack' /etc/passwd
openstack:x:2004:2004::/home/openstack:/bin/bash


*:任意长度的任意字符
?:任意单个字符
[]:任意范围之内的任意单个字符
[^]:任意范围之外的任意单个字符
[:didit:]数字
[:upper:]大写
[:punct:]字符标点
[:space:]空格


正则表达式:regular expression ,REGEXP

元字符:

1、基本正则表达式

.       匹配任意单个字符


[root@localhost ~]# grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin


*        匹配其前面的字符任意次


[root@localhost ~]# grep 'r.*t' /etc/passwd  (匹配字符串r开头、t结尾)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin


\?      匹配其前面的字符1次或者0次
\{m,n\}  匹配其前面的字符,至少m次 至多n次


[root@localhost ~]# grep 'ro\{0,1\}t' /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin


位置锚定:

^       锚定行首,此字符后的任意内容必须出现那在行首


[root@localhost ~]# grep '^r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash


$        锚定行尾,次字符前的任意内容必须出现在行尾


[root@localhost ~]# grep 'bash$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
black:x:1000:1000:black:/home/black:/bin/bash
black1:x:1008:1008::/home/kingdee:/bin/bash


^$       空白行
\<或\b   锚定词首,其后面的任意字符必须作为单词的首部出现
\>或\b   锚定词尾,其前面的任意字符必须作为单词的尾部出现
\<root\>或\broot\b   锁定单词,root作为一个完整的单词出现
\(\)    分组,匹配括号内的字符串任意次数


[root@localhost ~]# grep '\(ab\)*' test.txt
a
b
ab
abab
aab
aabb
abababa
abbababbab


\1                  调用第一个左括号以及与之对应的右括号所包括的内容
\2      类似
\3


REGEXP:REGular EXPression

Pattern:模式

正则表达式:

Basic REGEXP 基本

Extended REGEXP 扩展

基本正则表达式:

。 任意单个字符

[] 任意范围内字符

[^] 任意范围外的字符

次数匹配;

*匹配其前面任意单个字符

\?匹配其前字符0或1次

{m,n}匹配其前字符至少m次,至多n次,n省略则无上限,m=0则无下限

.*任意长度任意字符

grep 使用基本正则表达式定义的模式来过滤文本的命令

-i          忽略大小写
-v          反向搜索(搜索的不显示)
-o          只显示搜索到的字符串
--color     高亮匹配的字符
-E          使用扩展的正则表达式
-A  n       显示被匹配到的行以及其后面的n行
-B  n       显示被匹配到的行以及其前面的两行
-C  n       前后各n行


扩展正则表达式:

字符匹配:

. [] [^]

次数匹配:

*

?

+其前面的字符至少一次

{m,n}

位置锚定:

^ $ \< >

分组:

() \1 \2

或者:

| :or 左右完整字符串匹配

grep –E = egrep

fgrep fast grep 不支持正则表达式(不支持元字符)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息