linux邮箱格式正则表达式grep,Linux 下 grep 命令的正则表达式规范

本文介绍了Linux的grep命令及其与正则表达式的关系,详细讲解了正则表达式的种类、基本语法和特殊字符的用法。通过实例展示了如何在grep中使用正则表达式进行字符串匹配,包括字符类、数量限定符和位置限定符等。此外,还对比了正则表达式与通配符的区别,并提到了grep的基本和扩展规范的差异。
摘要由CSDN通过智能技术生成

使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,这就是正则表达式。Linux 的 grep 命令是一种查找过滤工具,用于在文件中查找指定模式的字符串,其支持正则表达式。

通配符和正则表达式的区别

在谈正则表达式之前,首先说一下通配符和正则表达式的区别,二者容易混淆。曾经我把通配符认为就是正则表达式,在本该使用统配符的地方意图使用正则表达式,由于没能达到想要的结果,这才意识到不对劲。通配符一般用于linux的shell命令中,例如:

grep hello *

这表示在当前目录下的所有文件中查找含“hello”字符串的文件的行。下面列出一些通配符的含义:

[a-z]或[12]:匹配方括号中指定范围内的单个字符或方括号列出的其中一个字符。

[!9]:不匹配方括号中所列字符或指定范围内的单个字符。

*:匹配0个字符或多个字符。

?:匹配任何单个字符,且不能为空字符。

正则表达式分类:

1、基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)

2、扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)

3、Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)

其实我们在大多数高级编程语言中所使用的正则表达式都源自Perl。实际上,正则表达式从Perl衍生出一个显赫的流派,叫做PCRE(Perl Compatible Regular Expression)。其他高级语言大多基于此修改或者扩展。而 Unix/Linux 下的工具大多采用POSIX规范,同时,POSIX规范又可分为两种流派,即 BREs 和 EREs。

正则表达式 Extended 规范

1、字符类

. 匹配任意一个字符

[] 匹配括号中的任意一个字符

\- 用在[]中,表示字符范围

^ 如果位于[]的开头,则匹配除去括号中字符之外的一切字符

[[:xxx:]] grep 工具预定义的一些命名字符类,例如 [[:alpha:]] 匹配一个字母,[[:digit:]] 匹配一个数字

2、数量限定符

? 紧跟在它前面的单元匹配零次或一次

\+ 紧跟在它前面的单元匹配一次或多次

\* 紧跟在它前面的单元匹配零次或多次

{N} 紧跟在它前面的单元应精确匹配N次 [1-9][0-9]{2} 匹配从100 到999 的整数

{N,} 紧跟在它前面的单元至少要匹配n次

{,M} 紧跟在它前面的单元至多匹配m次

{N,M} 紧跟在它前面的单元至少匹配n次,至多匹配m次

3、位置限定符

^ 匹配行首的位置

$ 匹配行末的位置

\< 匹配单词开头的位置

\> 匹配单词结尾的位置

\b 匹配单词开头或结尾的位置

\B 匹配非单词开头和结尾的位置

4、其他特殊字符

\ 转义字符,普通字符转义为特殊字符,特殊字符转义为普通字符

() 将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符

| 连接两个表达式,表示或的关系

以上介绍的是grep正则表达式的 Extended 规范,Basic 规范也有这些语法,只是字符 ?+{}|() 应解释为普通字符,要表示上述特殊含义则需要加 \ 转义。如果用 grep 而不是 egrep,并且不加 -E 参数,则应该遵照Basic 规范来写正则表达式。当然,如果是 grep -F,则只搜索固定字符串而不搜索正则表达式模式,不会按正则表达式语法解析后边的参数,grep -F 等价于 fgrep。

最后需要强调的一点是,grep 找的是包含某一模式的行,而不是完全匹配某一模式的行。也就是说,grep 的正则表达式匹配是以行为单位的。

一些示例

搜索以小写字母开头的行

grep -n ‘^[a-z]’ temp.txt

-n 参数表示输出时显示匹配的行号

搜索开头不是英文字母的行

grep -n ‘^[^a-zA-Z]’ temp.txt

搜索空行

grep -n ‘^$’ temp.txt

搜索以 g 开头和结尾的字符串在的行

grep -n ‘g.*g’ temp.txt

搜索g开头和结尾,中间是至少一个o的字符串

grep -n ‘goo*g’ temp.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值