正则表达式使用方法 | 学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习正则表达式使用方法

开发者学堂课程【Shell 编程入门到精通正则表达式使用方法】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/453/detail/5604


正则表达式使用方法

内容介绍

一、正则表达式使用方法

二、任意字符表示


一、正则表达式使用方法

正则表达式,又称正规表示法、常规表示法(英语 Regular Expression在代码中常简写为 regexregexp RE ),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。是指一个用来描述或者匹配一系列符合某个句法规则的字符的那个字符串。用某种模式去匹配一类字符串。

使用grep来举例正则表达式,首先要说明两个参数-v-z,如果不清楚的化可以man grep,搜索一下小写的v,可看到-invert-match不匹配或者反转匹配,另外一个-n一般显示的-line-number行号的意思,不做端口和id的转化,

1.正则表达式中特殊字符

(1 ) ^word :待搜寻的字符串(word)在行首!

搜寻"root"开始的行,准备文件passwdgrep搜索含有root的所有数据,如果只搜索开头为root的加^,:

[root@xuegod63 tmp]# grep root passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:”operator”:/root:/sbin/nologin

[root@xuegod63 tmp]# grep ^root passwd

root:x:0:0:root:/root:/bin/bash

(2)word$

搜索以什么结尾后跟上$,搜寻"bash"结尾的行,列出所有包含bash的可执行账号,例:

[root@xuegod63 tmp]# grep bash$ passwd

root:x:0:0: root: / root: /bin/bash

mysql:x:27 :27 :MySQL Server:/var/lib/mysql:/bin/bash

mk:x:500:500: : /home/mk: /bin/bash

(3) \ :将特殊符号的特殊意义去除

:搜寻包括单引号'的行,并把行号也打印出来,单引号不可直接写,要通过转译,觉得显示看不清的化可以加-n显示行号,--color显示颜色,将有特殊意义的符号,行号标亮。

[root@xuegod63 tmp]# grep -n --color \' /tmp/ passwd

8:halt:x:7:0:halt':/ sbin:/ sbin/halt

9:'mail':x:8:12:mail:/var/spool/mail:/ sbin/nologin

( 4)* :重复零个到无穷多个的前一个字符

ls *.txt 以任意字符开头.txt 结尾不同,在正则表达式里不适用,正则表达式前总要有一个符号,正则表达式表示多个任意要在*.前面再加.,ls .*.txt,搜寻包括sp,后面o2次以上的行。记得要写两个o,而如果此处是 spoo*spo*没有太大区别,因为*表示重复零个到无穷多个前一个字符,这里只是一个巧合,平时情况推荐采用spoo*写,例:

[ root@xuegod63 tmp]# grep spoo* passwd - -color

lp:x:4:7:lp: /var/spool/ lpd: /sbin/ nologin

lp:x:4:7:lp:/var/spoxxxl/ lpd: / sbin/ no login

mail' :x:8:12:mail:/var/spool/mail :/sbin/ nologin

"uucp":x:10: 14:uucp: /var/spool/uucp: / sbin/ no login

postfix:x:89:89: :/var/spool/postfix:/ sbin/ nologin

[ root@xuegod63 tmp ]#grep spo* passwd - -color

lp:x:4:7:lp: /var/spool/ lpd:/ sbin/ nologin

lp:x:4:7:lp: /var/ spoxxxl/ lpd:/ sbin/nologin

'mail' :x:8:12 :mail: /var/spool/mail:/sbin/ nologin

"uucp"2p" :x: 10: 14:uucp:/ var/spool/uucp: / sbin/ nologin

postfix:x:89:89: :/var/spool/ postfix: /sbin/ nologin

(5) [list] :字符集合,里面列出想要选择的字符

搜寻包括ga或者go,通过g[ao]形式可以同时匹配两个条件的行,例:

[ root@xuegod63 tmp]# grep g[ao] /tmp/ passwd --color

games :X: 12: 100 :games: /us r/games: / sbin/ nologin

gopher:x: 13: 30: gopher:/var/gopher :/ sbin/nologin

(6 )搜寻以#开头和不以#号开头的行,#开头的表示注释,例:

[root@xuegod63 tmp]# grep [^ #] /tmp/ passwd

[root@xuegod63 tmp]# grep ^[^ #] /tmp/ passwd

( 7 ) [n1-n2] :字符集合的,里面列出想要包括的字符范围!

搜寻含有数字的34的行,并且-color 标亮34,和包括1-9之前的数字,例:

[root@xuegod63 tmp]# grep [3-4] passwd –color

ntp:x:38:38: :/etc/ntp: /sbin/nologin

apache:x:48:48:Apache:/var/www: /sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User: /var/lib/nfs:/sb in/nologin

[root@xuegod63 tmp]# grep [0-9] passwd --color

"uucp" :x:10:14: uucp: /var/spool/uucp:/sbin/nologin

operator :X:11:0: "operator" :/ root: / sbin/nologin

games :x:12 :100: games: /usr/games: / sbin/ nologin

2、找出开始为小写字母的

首先 grep 过滤,然后加^,以什么开头,开头里面写上范围,最后写上 passwd,输出以小写字母开头,例:

[root@xuegod63 tmp]# grep ^[a-z] passwd

nologin

tcpdump:x: 72:72::/:/sbin/ nologin

mysql:x:27 :27 :MySQL Server:/var/lib/mysql:/b

mk:x:500:500: : /home/mk: /bin/bash

[root@xuegod63 tmp]# grep ^[A-Z] passwd

Mk2:x:502:500::/home/mk:/bin/bash

Mk3:x:503:500::/home/mk:/bin/bash

那如果不想要开头是英文字母,由不以#开头^[^#]同理可得,^[^a-zA-Z]为不以字母开头,例:

[root@xuegod63 tmp]# grep ^[^a-zA-Z] passwd

' mail' :x:8:12:mail: /var/ spool/mail :/ sbin/nologin

"uucp" :x:10:14:uucp: /var/ spool/uucp: / sbin/nologin

#mkt:x:500:500: : /home/mk: /bin/bash

显示空白行及行号:

[root@xuegod63 tmp]# grep -n ^$ passwd

51:

vim 打开到51行确认是空行。

 

二、任意字符表示

正则表达式中,"." 代表绝对有一个任意字符的意思,可以是数字,字母等,字符长度是1;而代表重复前一个字符到无穷次的意思。任长度的字符表示方法: .*

Ÿ  寻找包括有r开头和t结束且长度为四个字符行, 加上–color 更便于观察,例出的不光有 root,还有r/ ft,例:

[root@xuegod63 tmp]# grep r..t passwd –color

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

如果非要找r开头的,加^,则只有 root 符合,例:

[root@xuegod63 tmp]# grep ^r..t passwd

root:x:0:0: root: /root: /bin/bash

Ÿ  寻找oo, ooo, oooo等等的数据,也就是说,至少要有两个o以上,当写oo时,出现ooo数据,因为*表示重复零个到无穷多个前一个字符,例:

[root@xuegod63 tmp]# grep oo* passwd –color

root:x:0:0: root: /root: /bin/bash

bin:x:1:1:bin: /bin: /sbin/nologin

[root@xuegod63 tmp]# grep ooo* passwd –color

root:x:0:0: root:/ root: /bin/bash

lp:x:4:7: lp:/var/ spool/ lpd: /sbin/nologin

Ÿ  寻找包括g开头和g结束的字符串,中间可有可无,^g. *g passwd 则为以g开头和g结束的字符串,例:

[ root@xuegod63 tmp]# grep g. *g passwd –-color

games :x:12 :100 : games: /usr/games: /sbin/ nologin

gopher :x:13:30 : gopher: /var/gopher: /sbin/ nologin

[ root@xuegod63 tmp]# grep ^g. *g passwd --color

games :x:12: 100: games: /usr/games: /sbin/nologin

gopher :x:13:30: gopher: /var/gopher: /sbin/nologin

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Java
正则表达式基本使用
正则表达式基本使用
603 0
正则表达式基本使用
|
7月前
|
Python
正则表达式高级用法
正则表达式是强大的文本匹配工具,常用于搜索、匹配和验证字符串。高级用法包括:捕获组(区分需要提取的内容)、非捕获组(减少开销)、零宽断言(定位匹配位置)、反向引用(匹配相同内容)、嵌入代码(实现复杂逻辑)、贪婪与非贪婪匹配(控制匹配范围)和递归匹配(处理嵌套结构)。了解这些高级技巧能提升字符串操作效率。示例展示了验证Email、电话号码、提取URL和清理多余空格的正则表达式应用。
正则表达式的用法
正则表达式的用法
72 1
|
数据安全/隐私保护 C++ Perl
第二章正则表达式
第二章正则表达式
76 0
Python正则表达式语法快速入门
正则表达式需要与相关函数共同使用,对函数的学习可以参考: Python正则表达式所有函数详解
|
自然语言处理 关系型数据库 MySQL
正则表达式使用方法 | 学习笔记
快速学习正则表达式使用方法
|
算法 Shell Linux
正则表达式基础 | 学习笔记
快速学习正则表达式基础。
182 0
正则表达式解析_学习笔记
时间:2017.11.20 作者:李强 参考:man,info,magedu讲义 声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
831 0
|
测试技术 C#
C#正则表达式语法教程
C#语法之正则 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新...
1850 0