shell脚本编程(一)正则表达式
程序员文章站
2022-07-10 08:28:36
...
正则表达式
文本查找
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 不支持正则表达式(不支持元字符)