正则表达式与文本三剑客之grep

目录

前言

一、grep命令

二、基础正则表达式常见元字符

2.1、特殊字符

2.2、定位符

2.3、非打印字符

三、元字符操作实例

3.1、查找特定字符

3.2、利用中括号"[]"来查找集合字符

[3.3、查找行首"^"与行尾字符""](#3.3、查找行首“^”与行尾字符“”)

3.4、查找任意一个字符"."与重复字符"*"

3.5、查找连续字符范围"{}"

四、扩展正则表达式

4.1、+

4.2、?

4.3、|

4.4、()

4.5、()+


前言

正则表达式,又称规则表达式。(英语:Regular Expression),在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。

工具:grep sed awk egrep

正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式---通常用于判断语句中,用来检查某一字符串是否满足某一格式

正则表达式是由普通字符与元字符组成

普通字符包括大小写字母、数字、标点符号及一些其他符号
元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

一、grep命令

格式:grep [选项]... 查找条件 目标文件

-E :开启扩展(Extend)的正则表达式
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-o :只显示被模式匹配到的字符串
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!(反向查找,输出与查找条件不相符的行)
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
-n :顺便输出行号

二、基础正则表达式常见元字符

2.1、特殊字符

|------------|----------------------------------|
| \ | 转义符,将特殊字符进行转义,忽略其特殊意义 |
| ^ | 匹配行首,^则是匹配字符串的开始^tux匹配以tux开头的行 |
| $ | 匹配行尾,则是匹配字符串的结尾tux匹配以tux结尾的行 |
| . | 匹配除换行符\r\n之外的任意单个字符 |
| [list] | 匹配list列表中的一个字符 |
| [^list] | 匹配任意不在list列表中的一个字符 |
| * | 匹配前面子表达式0次或者多次 |
| \{n\} | 匹配前面的子表达式n次 |
| \{n,\} | 匹配前面的子表达式不少于n次 |
| \{n,m\} | 匹配前面的子表达式n到m次 |

注: egrep、awk使用{n}、{n, }、{n, m}匹配时"{}"前不用加"\"

egrep -E -n 'wo{2}d' test.txt //-E 用于显示文件中符合条件的字符

2.2、定位符

^ 匹配输入字符串开始的位置

$ 匹配输入字符串结尾的位置

2.3、非打印字符

\n 匹配一个换行符

\r 匹配一个回车符

\t 匹配一个制表符

三、元字符操作实例

准备一个文件

3.1、查找特定字符

grep -n 'the' 1.txt

grep -in 'the' 1.txt

grep -vn 'the' 1.txt

3.2、利用中括号"[]"来查找集合字符

1、执行以下命令即可同时查找到"shirt"与"short"这两个字符串,其中"[]"中无论有几个字符, 都仅代表一个字符,也就是说"[io]"表示匹配"i"或者"o"。

2、查找包含重复单个字符"oo"

3、查找"oo"前面不是"w"的字符串

4、不希望"oo"前面存在小写字母

"a-z"表示小写字母,大写字母则通过"A-Z"表示。

5、查找包含数字的行

3.3、查找行首"^"与行尾字符"$"

1、查询以"the"字符串为行首的行

2、查询以小写字母开头的行/查询大写字母开头的行/查询不以字母开头的行

3、查询空白行

3.4、查找任意一个字符"."与重复字符"*"

正则表达式中小数点(.)也是一个元字符,代表任意一个字符。

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

1、查找"w??d"的字符串,即共有四个字符,以 w 开头 d 结尾。

2、查询 oo、ooo、ooooo 等资料, 则需要使用星号(*)元字符。

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

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

5、查询任意数字所在行

3.5、查找连续字符范围"{}"

1、查询两个 o 的字符

2、查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串

3、查询以 w 开头以 d 结尾,中间包含 2 个或 2 个以上 o 的字符串

四、扩展正则表达式

为了简化整个指令,需要使用 范围更广的扩展正则表达式

grep 命令仅支持基础正则表达式,如果使用扩展正则表达式,需要使用 egrep 或 awk 命令

egrep 命令与 grep 命令的用法基本相似。egrep 命令是一个搜索文件获得模式,使用该命令可以搜索文件中的任意字符串和符号,也可以搜索一个或多个文件的字符串,一个提示符可以是单个字符、一个字符串、一个字或一个句子。

4.1、+

作用:重复一个或者一个以上的前一个字符

示例:执行"egrep -n 'wo+d' test.txt"命令,即可查询"wood" "woood" "woooooood"等字符串

4.2、?

作用:零个或者一个的前一个字符

示例:执行"egrep -n 'bes?t' test.txt"命令,即可查询"bet""best"这两个字符串

4.3、|

作用:使用或者(or)的方式找出多个字符

示例:执行"egrep -n 'of|is|on' test.txt"命令即可查询"of"或者"if"或者"on"字符串

4.4、()

作用:查找"组"字符串

示例:"egrep -n 't(a|e)st' test.txt",查询"tast"或者"test"字符串

4.5、()+

作用:辨别多个重复的组

示例:查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串

相关推荐
运维小贺2 天前
Nginx常用的模块
运维·nginx·正则表达式
Viooocc3 天前
正则表达式
正则表达式
vvilkim3 天前
开发中常用的正则表达式规则与应用
正则表达式
林深的林4 天前
正则表达式(1)
正则表达式
ThisIsClark5 天前
【玩转正则表达式】正则表达式常用语法汇总
正则表达式
ThisIsClark5 天前
【玩转正则表达式】替换与正则表达式的结合
正则表达式
浪九天6 天前
Java常用正则表达式(身份证号、邮箱、手机号)格式校验
java·开发语言·正则表达式
ThisIsClark6 天前
【玩转正则表达式】将正则表达式中的分组(group)与替换进行结合使用
数据库·mysql·正则表达式
小张-森林人8 天前
Oracle 字符串分割革命:正则表达式与 Lateral Join 的优雅解法
数据库·oracle·正则表达式
Lojarro9 天前
正则表达式
正则表达式