shell入门之----正则表达式
2020-04-19 23:00
573 查看
正则表达式RE
正则表达式基本元字符
正则表达式拓展元字符
用来处理文本
正则表达式(Regular Expression, RE)是一种字符模式, 用于在查找过程中匹配指定的字符. 在大多数程序里, 正则表达式都被置于两个正斜杠之间;
例如/l[oO]ve/就是由正斜杠界定的正则表达式, 它将匹配被查找的行中任何位置出现的相同模式. 在正则表达式中,元 字符是最重要的概念
元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定 其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
No.1 正则表达式基本元字符
基本正则表达式元字符 元字符 示例 功能 ^ 行首定位符 ^love $ 行尾定位符 love$ . 匹配单个字符 l..e * 匹配前导符0到多次 ab*love .* 匹配任意多个字符 [] 匹配方括号中任意一个字符 [lL]ove [ - ] 匹配指定范围内的一个字符 [a-z0-9]ove [^] 匹配不在指定组里的字符 [^a-z0-9]ove \ 用来转义元字符 love\. \< 词首定位符 \<love \> 词尾定位符 love\> \(\) 匹配后的标签
No.2正则表达式拓展元字符
扩展正则表达式元字符 + 匹配一个或多个前导字符 [a-z]+ove ? 匹配零个或一个前导字符 lo?ve a|b 匹配a或b love|hate () 组字符loveable|rs love(able|rs) ov+ ov+ (ov)+ (..)(..)\1\2 标签匹配字符 (love)able\1er x{m} 字符x重复m次 o{5} x{m,} 字符x重复至少m次 o{5,} x{m,n} 字符x重复m到n次 o{5,10}
shell 编程-grep
egrep 支持正则表达式的拓展元字符 #egrep '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' file1.txt
[root@newrain ~]# num1=1 运用正则,判断需要[[ ]] [root@newrain ~]# [[ $num1 =~ ^[0-9]+$ ]] && echo "yes" || echo "no" yes [root@newrain ~]# num3=1b1 [root@newrain ~]# [[ $num3 =~ ^[0-9]+$ ]] && echo "yes" || echo "no" no [root@newrain ~]# [[ $num =~ ^[0-9]\.[0-9]+$ || $num =~ ^[0-9]+$ ]] && echo "yes" || echo "no" //输入的只能是数字(包括小数) * 0或多个 [root@newrain ~]# useradd abrt [root@newrain ~]# grep 'abc*' /etc/passwd abrt:x:1041:1041::/home/abrt:/bin/bash \< 词首定位符号 \>词尾定位符号 [root@newrain ~]# cat jack.txt Jack JACK JAck jackly :% s/\<[Jj]ack\>/123/g ^以什么开头 [root@newrain ~]# grep '^root' /etc/passwd root:x:0:0:root:/root:/bin/bash $以什么结尾 [root@newrain ~]# grep 'bash$' /etc/passwd root:x:0:0:root:/root:/bin/bash confluence:x:1000:1000:Atlassian Confluence:/home/confluence:/bin/bash to:x:1003:1003::/home/to:/bin/bash . 匹配单个字符 [root@newrain ~]# grep 'r..t' /etc/passwd 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 dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin [root@newrain ~]# grep 'r.t' /etc/passwd operator:x:11:0:operator:/root:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin .* 任意多个字符 [root@newrain ~]# grep 'r.*t' /etc/passwd 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-network:x:192:192:systemd Network Management:/:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin abrt:x:1041:1041::/home/abrt:/bin/bash [] 匹配方括号中的任意一个字符 [root@newrain ~]# grep 'Root' /etc/passwd [root@newrain ~]# grep '[Rr]oot' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin [ - ] 匹配指定范围内的一个字符 [root@newrain ~]# grep [a-z]oot /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin [^] 匹配不在指定组内的字符,非得意思 [root@newrain ~]# grep '[^0-9]oot' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin [root@newrain ~]# grep '[^0-9A-Z]oot' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin [root@newrain ~]# grep '[^0-9A-Za-z]oot' /etc/passwd [root@newrain ~]# [root@newrain ~]# useradd Root [root@newrain ~]# grep '[a-z]oot' /etc/passwd //a-z 包含大写 root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin Root:x:1042:1042::/home/Root:/bin/bash [root@newrain ~]# grep '^[rc]oot' /etc/passwd root:x:0:0:root:/root:/bin/bash ^在[]内表示取反,^在[]外表示以什么开头 \(\)匹配后的标签 [root@newrain ~]# cat file1.txt IPADDR=192.168.1.123 GATEWAY=192.168.1.1 NETMASK=255.255.255.0 DNS=114.114.114.114 :% s/\(192.168.1.\)123/\12/ :% s/\(192.\)\(168.\)\(1.\)2/\1\2\35/ :% s/\(192.\)\(168.\)\(1.\)\(5\)/\1\26.\4/ 扩展正则表达式元字符 + 匹配一个或多个前导字符 [a-z]+ove ? 匹配零个或一个前导字符 lo?ve a|b 匹配a或b love|hate (..)(..)\1\2 标签匹配字符 (love)able\1er x{m} 字符x重复m次 o{5 x{m,} 字符x重复至少m次 o{5,} x{m,n} 字符x重复m到n次 o{5,10} + 匹配一个或多个前导字符 [root@newrain ~]# egrep 'ro+t' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin ? 匹配零个或一个前导字符 [root@newrain ~]# egrep 'ro?t' /etc/passwd abrt:x:1041:1041::/home/abrt:/bin/bash a|b 匹配a或b [root@newrain ~]# netstat -anlp|egrep ':80|:22' [root@newrain ~]# egrep 'root|alice' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin d ockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin x{m} 字符x重复m次 [root@newrain ~]# cat a.txt love love. loove looooove [root@newrain ~]# egrep 'o{2}' a.txt loove looooove [root@newrain ~]# egrep 'o{2,}' a.txt loove looooove [root@newrain ~]# egrep 'o{6,7}' a.txt
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Linux基础入门及系统管理01-Shell三剑客之grep及正则表达式14
- Linux基础入门及系统管理01-Shell三剑客之egrep及扩展正则表达式15
- shell_RE正则表达式——入门
- 快速入门正则表达式
- Python3爬虫之入门和正则表达式
- 正则表达式30分钟入门教程
- Linux--shell脚本之正则表达式
- Linux基础入门(六) --学习笔记-正则表达式
- 正则表达式30分钟入门教程
- 正则表达式入门教程
- Python入门(06) -- 正则表达式
- C#正则表达式快速入门
- 正则表达式快速入门教程
- 正则表达式30分钟入门教程
- Python爬虫入门七之正则表达式
- 正则表达式30分钟入门教程
- 正则表达式30分钟入门教程(第二版)
- 正则表达式学习指南(一)----入门简介
- 正则表达式(入门)
- 正则表达式30分钟入门教程