ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

正则表达式

2022-06-11 16:05:30  阅读:171  来源: 互联网

标签:字符 匹配 fedora 正则表达式 grep root bash


什么是正则表达式?

为处理文本、字符串而定义的一套规则和方法

包括:普通字符和特殊字符

基本正则表达式

文字匹配

[root@fedora ~]# grep charlie /etc/passwd
charlie:x:1001:1001::/home/charlie:/bin/bash

锚匹配

匹配所有包含字母h的行

[root@fedora ~]# grep h /etc/passwd
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

^ 匹配行首

[root@fedora ~]# grep ^h /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt

$ 匹配行尾

[root@fedora ~]# grep h$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash
charlie:x:1001:1001::/home/charlie:/bin/bash

^$ 匹配空行

[root@fedora ~]# grep ^$ test.sh 


[root@fedora ~]# 

\< 匹配以字母h开头的词

[root@fedora ~]# grep "\<h" /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
flatpak:x:986:983:User for flatpak system helper:/:/sbin/nologin
chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash
charlie:x:1001:1001::/home/charlie:/bin/bash

\> 匹配以字母h结尾的词

[root@fedora ~]# grep "h\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
saslauth:x:992:76:Saslauthd user:/run/saslauthd:/sbin/nologin
chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash
charlie:x:1001:1001::/home/charlie:/bin/bash

\< \> 完整匹配单词bash

[root@fedora ~]# grep "\<bash\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash
charlie:x:1001:1001::/home/charlie:/bin/bash

匹配任何字符

. 点:匹配任意一个字符(换行符除外)

[root@fedora ~]# grep ".TF" anaconda-ks.cfg 
lang zh_CN.UTF-8
[root@fedora ~]# echo "a123 b1234 c12" | grep "12."
a123 b1234 c12
# 此处不匹配c12,因为"12."中"."要求至少要有一个字符

括号表达式

[……] 方括号:匹配该括号字符集中的某一个字符

[a-z] # 匹配所有小写字母
[A-Z] # 匹配所有大写字母
[a-zA-Z] # 匹配所有字母
[0-9] # 匹配所有数字
# 方括号里 ^ 表示 非或排除 的意思
[^a-z] # 匹配除了小写字母以外的所有字符
[Yy][Ee][Ss] # 匹配所有yes(不区分大小写)

重复模式零次或多次

* 星号:匹配她前面字符的任意多次,包括0次

[root@fedora ~]# echo "z zo zoo" | grep zo*
z zo zoo

转义元字符

\ 反斜线:转义某一个特殊含义的字符,将其解释为字面含义

1.使用 \$ ,将 $ 解释为美元符号
2.使用 \\ ,表示字符 \
3.grep "^[A-Z].*\$" file
# 从file中匹配以大写字母开头、以"."结尾的任意字符

grep 如何 支持拓展正则表达式?

1. grep 采用 -E ,--extended-regexp 选项,将模式解释为拓展正则表达式(ERE)

2. grep 的模式中采用转义符

3. 使用 egrep 代替 grep


拓展正则表达式

数量词

*  星号:匹配它前面字符的0次或无限次(>=0)

+ 加号:匹配它前面字符的1次或无限次(>=1)

?问号:匹配它前面字符的1次或0次(=1或=0)

重复

{ } 大括号中加上一个或两个数字,指定它前面匹配的重复的次数

有些应用程序需要进行转义,否则大括号仅仅表示字面含义

{m} 匹配前一个字符m次

{m,n} 匹配前一个字符m次至n次。

m和n可以省略:

1.若省略m,则匹配0至n次

2.若省略n,则匹配无限次

交替

| 管道符:用于匹配一组可选字符中的任意一个

# 从文件GPL中匹配GPL或General Public Licenses
grep -E "GPL|General Public Licenses" GPL 
grep "GPL\|General Public Licenses" GPL 
egrep "GPL|General Public Licenses" GPL 

分组

( ) 圆括号:将一组正则表达式括起来,构建子表达式

子表达式的用途

作为一个整体,进行逻辑划分

(GPL|General) Public Licenses
# 匹配GPL Public Licenses 或 General Public Licenses
(abc){2} # 匹配 abcabc
a(123|456)b # 匹配 a123c 或 a456c

通过子表达式的编号,进行反向引用


反向引用与子表达式

在圆括号中的子表达式将匹配内容存储到一个临时缓冲区(寄存器)中

按照从左到右出现的顺序存储

编号从数字1开始,最多可存储9(或99)个捕获的子表达式

使用\n访问每个缓冲区,其中n是表示特定的缓冲区十进制数


标签:字符,匹配,fedora,正则表达式,grep,root,bash
来源: https://www.cnblogs.com/simplerude/p/16362619.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有