六、文本搜索工具(grep)和正则表达式

一、grep工具的使用

1、概念

grep: 是 linux 系统中的一个强大的文本搜索工具,可以按照 正则表达式 搜索文本,并把匹配到的行打印出来(匹配到的内容标红)。

2、语法

grep [options]...... pattern [file]......
工作方式: grep 在一个或者多个文件中搜索字符串模板,如果模板中包括空格,需要使用引号引起来,模板后的所有字符串会被看作是文件名。
**工作结果:**如果模板搜索成功,则返回 0 状态码;如果搜索不成功,则返回 1 状态码;如果搜索的文件不存在,则返回2 的状态码。我们可以利用这些返回状态码进行一些自动化的 shell 脚本处理工作。

3、相关选项

选项 说明
-i 忽略大小写
-e 实现多个选项间的逻辑或关系
-E 如果pattern是扩展正则表达式,需要使用-E选项,grep -E = egrep
-n 显示行号
-w 按单词匹配
-o 只显示匹配到的内容
-v 不显示匹配到的行
-c 统计匹配的

4、相关使用

-i、-E、-e(使用扩展正则表达式时必须加 -E 选项):

两种表达方式:忽略大小写匹配ab或c;

-w:

grep单独匹配字符串与加-w选项后匹配字符串的区别;

-o:

只显示匹配到的内容;

-v:

实现反选;

-c:

统计匹配到的行数;与wc -l 效果相同;

-r:

递归查询;

-rl:

递归查询问及那,只显示匹配到内容的文件名字;

二、正则表达式

1、背景

在进行程序设计的过程中,用户处理某些文本,需要查找符合某些比较复杂规则的字符串,使用正则表达式则会以非常简短的代码完成。

2、概念

正则表达式:通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串的表达式,简单来说,就是用在字符串的处理上的一项表达式。由于正则表达式语法简练,功能强大得到了许多程序设计语言的支持,包括Java、C++、Perl以及Shell等。

3、分类

  • 基本正则表达式
  • 扩展正则表达式

(1)基本正则表达式

概念

基本正则表达式(Basic Regular Expression,BRE) ,又称为标准正则表达式,是最早制订的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX 规范制订的两种正则表达式语法标准之一,另外一种语法标准称为扩展正则表达式。

②相关选项
元字符 说明
^ 以某个字符开头
$ 以某个字符结尾
. 匹配任意单字符
* 对前一项进行0次或者多次重复匹配
{m,n} 将前一项字符重复m-n次,{m, } , {, n} , {m}
[ ] 对方括号内的单字符进行匹配
[^] 不匹配方括号内的单字符
^[ ] 匹配以某个字符开头的行
\ 转义字符,让一些特殊符号失效
() 定义一个子表达式
词首【\<或\b】和词尾锚定【\>或\b】 其后面的任意字符必须作为单词首部出现;其前面的任意字符必须作为单词尾部出现
③相关使用

^:

$:

. :

.. :

匹配任意两个字符;

* :

------正则表达式中的 * 与其他命令中的 * 区分开

Ⅰ、正则表达式中,对前一项字符进行0次或者多次重复匹配------使用时,*前必须加需要匹配的字符;

Ⅱ、其他命令中,匹配任意字符;

{m, n}:

grep -E (不用转义字符);不用则需要转义;

{,n}:最少0次,没有的都匹配;

[ ]:

一个一个进行匹配;

另一种写法(了解);

[^]:

不匹配单括号中的字符,只匹配有符号的行(空格也算)

^[]:

匹配以[ ]中内容开头的行;

不匹配以方括号中开头的行;

**():**定义一个子表达式

\1------是子表达式,这里的\1表示匹配red字符,第三条命令表示匹配首尾相同(都是red),中间任意的字符(包括空格);

第一条命令的子表达式\1是.*,完整命令表示首尾、中间都匹配任意字符;

第二条命令的子表达式\1是. ,完整的命令表示匹配首尾都相同的任意单字符,中间任意的字符;


\<或\b:

\>或者\b:

(2)扩展正则表达式

①概念

扩展正则表达式(Extended Regular Expression,ERE) 支持比基本正则表达式更多的元字符,但是扩 展正则表达式对有些基本正则表达式所支持的元字符并不支持。
前面介绍的元字符 "^"、"$"、"."、"*"、"[]"以及"[^]" 这 6 个元字符在扩展正则表达式都得到了支持,并且其意义和用法都完全相同,不再重复介绍。接下来重点介绍一下在扩展正则表达式中新增加的一些元字符。

②新增的元字符
元字符 说明
将前一项字符进行0次或者1次的重复匹配
+ 将前一项进行1次或者多次的重复匹配
(|) 匹配 | 符号左边或者右边的字符

只有加了-r的才可以跟目录,否则跟只能文件

相关推荐
st_333 分钟前
Junit5 单元测试入门
数据库·单元测试·log4j
s***g5404 分钟前
MySQL-操作数据库备份与恢复
数据库·mysql
CQU_JIAKE26 分钟前
11.5【算法】6-1 表彰优秀学生(多态)
数据库
Elastic 中国社区官方博客1 小时前
使用数据层进行数据生命周期管理
大数据·数据库·elasticsearch·搜索引擎·全文检索·时序数据库
我爱李星璇2 小时前
Spring Boot项目的创建
java·数据库·spring boot
锵锵锵锵~蒋2 小时前
实时数据开发|Flink异步IO--提升性能和吞吐量
jvm·数据库·flink·实时数据开发
小麦项目管理指南3 小时前
工程企业需要什么样的财务软件?
大数据·数据库·信息可视化·项目管理
涛思数据(TDengine)3 小时前
解密时序数据库的未来:TDengine Open Day技术沙龙精彩回顾
数据库·时序数据库·tdengine
cdut_suye4 小时前
Linux权限机制深度解读:系统安全的第一道防线
linux·运维·服务器·数据库·人工智能·系统安全·热榜
Elastic 中国社区官方博客4 小时前
使用历史索引监控 Elasticsearch 索引生命周期管理
大数据·数据库·elasticsearch·搜索引擎·全文检索·时序数据库