正则表达式的基本用法

正则表达式的基本用法

一:正则表达式的定义

​ 正则表达式又称正规表达式、常规表达式。在代码中常简写为 regex、regexp 或 RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说, 是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。正则表达式一般用于脚本编程与文本编辑器中。

​ 正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式。基础正则表达式是常用的正则表达式的最基础的部分。在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式,而 egrep 与 awk 支持扩展正则表达式 。

二:基础正则表达式示例

1、grep命令
  • “-n”表示显示行号
  • “-i”表示不区分大小写
  • 命令执行后,符合匹配标准的字符,字体颜色会变为红色

(1)从/etc/passwd文件中查找特定的字符“the” 所在的位置

[root@client ~]# grep -n 'the' /etc/passwd
25:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

(2) 从 test.txt文件中查找出特定字符“the” 所在位置,不区分大小写

[root@client ~]# grep -in 'the' /etc/passwd

(3)反向选择,查找不包含“the”字符的行

[root@client ~]# grep -vn 'the' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
...省略内容
2、利用中括号 “[ ]” 来查找集合字符
  • 想要查找“shirt”与“short”这两个字符串时,可以发现这两个字符串均包含“sh” 与“rt”
  • “[]”中无论有几个字符,都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”

(1)同时查找到 “shirt” 与 “short” 这两个字符串

[root@localhost ~]# grep -n 'sh[io]rt' /etc/passwd

(2) 查找包含重复单个字符“oo”

[root@localhost ~]# grep -n 'oo' /etc/passwd
  • 集合字符的反向选择可以通过“[^]”实现

(1)在 /etc/passwd文本中查找 “oo” 前面不是 “r” 的字符串

[root@localhost ~]# grep -n '[^r]oo' /etc/passwd

(2) 检索 “oo” 前面不分大小写字母的字符串

[root@localhost ~]# grep -n '[^a-zA-Z]oo' /etc/passwd

(3)查找包含数字的行

[root@localhost ~]# grep -n '[0-9]' /etc/passwd
3、查找行首 “^” 与行尾字符 “$”
  • 基础正则表达式包含两个定位元字符:“^”(行首)与“$”(行尾)
  • “^”符号在元字符集合“[]”符号内外的作用是不一样的,在“[]”符号内表示反向选择,在“[]”符号外则代表定位行首
  • 若想查找以某一特定字符结尾的行则可以使用“$”定位符

(1)查找以“the”字符串为行首的行

[root@localhost ~]# grep -n '^the' /etc/passwd

(2) 查询以小数点 . 结尾的行 。 小数点 . 在正则表达式中也是一个元字符,所以在这里需要用转义字符 “\” 将具有特殊意义的字符转化成普通字符

[root@localhost ~]# grep -n '\.$' /etc/passwd
4、查找任意一个字符 “ . ” 与重复字符 “ * ”

(1) 查找以 w 开头 d 结尾,共有四个字符的字符串

[root@localhost ~]# grep -n 'w..d' /etc/passwd

“ * ”代表的是重复零个或多个前面的单字符

(1) “ o* ” 表示拥有零个(即为空字符)或大于等于一个 “o” 的字符

[root@localhost ~]# grep –n 'o*' /etc/passwd 

(2) ” oo* ”, 则第一个 o 必须存在,第二个 o 则是零个或多个 o, 所以凡是包含 o、oo、ooo、ooo,等的资料都符合标准

[root@localhost ~]# grep –n'oo*' /etc/passwd

(3) 查询以 w 开头 d 结尾,中间包含至少一个 o 的字符串

[root@localhost ~]# grep –n'woo*d' /etc/passwd

(4) 查询以 w 开头 d 结尾,中间的字符可有可无的字符串

[root@localhost ~]# grep –n'w.*d' /etc/passwd

5、查找连续字符范围 “ {} ”

因为“{}”在 Shell 中具有特殊 意义,所以在使用“{}”字符时,需要利用转义字符“\”,将“{}”字符转换成普通字符 。

(1) 查询两个 o 的字符

[root@localhost ~]# grep -n 'o\{2\}' /etc/passwd  '2表示两个o'

(2) 查询以 w 开头以 d 结尾,中间包含 2 以上 o 的字符串

[root@localhost ~]# grep -n 'wo\{2,\}d' /etc/passwd
a wood cross!
#woood # 
#woooooood #

三:元字符总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yuAajMQu-1576148777121)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1576148117956.png)]

四:扩展正则表达式

1、egrep命令

​ 通常情况下会使用基础正则表达式就已经足够了,但有时为了简化整个指令,需要使用范围更广的扩展正则表达式 。

​ grep 命令仅支持基础正则表达式,如果使用扩展正则表达式,需要使用 egrep 或 awk 命令 。 egrep 命令与 grep 命令的用法基本相似。egrep 命令是一个搜索文件获得模式,使用该命令可以搜索文件中的任意字符串和符号,也可以搜索一个或多个文件的字符串,一个提示符可以是单个字符、一个字符串、一个字或一个句子 。

2、扩展正则表达式常见元字符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AJhgaD7w-1576148777121)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1576148358309.png)]

3、 例如,使用基础正则表达式查询除文件中空白行与行首为“#” 之外的行(通常用于查看生效的配置文件)

grep –v '^$' test.txt | grep –v '^#'

使用扩展正则表达式

egrep –v '^$|^#' test.txt		'单引号内的管道符号表示或者(or)'

例如,使用基础正则表达式查询除文件中空白行与行首为“#” 之外的行(通常用于查看生效的配置文件)

grep –v '^$' test.txt | grep –v '^#'

使用扩展正则表达式

egrep –v '^$|^#' test.txt		'单引号内的管道符号表示或者(or)'

正则表达式的基本用法,只要正确运用,就能够在字符串提取和文本修改中起到很大作用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值