IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【Linux】grep命令与正则表达式(RegExp) -> 正文阅读

[系统运维]【Linux】grep命令与正则表达式(RegExp)


一、开发环境介绍

本文使用VMware虚拟机,运行Ubuntu 18.04.1 LTS版本。使用的Linux内核版本为4.15.0。建立ssh远程连接,通过Xshell操作虚拟机。
另外,使用的shell脚本为bash。


二、Linux中grep的作用

grep命令是一种命令行实用程序,用于在纯文本数据集中搜索与正则表达式匹配的行。通过find命令可以在/bin命令下找到grep命令的可执行程序。
grep命令的全称是"Globally search for a regular expression and print matching lines" 从中可以看到grep命令几个特点:1)globel 全文件搜索。这是因为在Unix、Unix-like系统中为了要彻底搜索一个文件,有的用户在要搜索的字符串前加上前缀 global。2)regular expression 正则表达式匹配。3)matching lines 按行匹配。4)print 打印信息。
grep还有变体程序egrepfgreprgrep,它们的作用分别与grep -Egrep -Fgrep -r相同。


三、grep命令使用格式和常用选项

Linux manual给出的grep命令SYNOPSIS有下列三种,其中常用的是第一种

1)grep [OPTIONS] PATTERN [FILE...]
2)grep [OPTIONS] -e PATTERN ... [FILE...]
3)grep [OPTIONS] -f FILE ... [FILE...]

grep命令有以下常用选项:

OPTIONDESCRIPTIONFUNCTION
-nline number显示行号
-Eextended-regexp使用拓展正则表达式规则
-Ffixed-strings不使用正则表达式规则
-iignore-case无视大小写
-ccount只显示匹配总数,不显示匹配行号
-wword-regexp把pattern作为一个单词匹配
-vinvert-match反向匹配,匹配结果为不包含匹配文本的所有行
-l–files-with-matches列出包含匹配项的文件名
-Lfiles-without-match列出不包含匹配项的文件名

其中 -w 相当于正则表达式中的 "\< \>"
即以grep -nEw “how” file匹配到的只能是完整的how,however不会作为匹配对象。
常用选项中使用最多的一般是 -nE


四、grep中常用的正则表达式

我们都知道Linux find命令通过通配符 “*”"?" “[]” 进行匹配,而Linux grep命令使用的是正则表达式(Regular expression)我们可以简单粗暴地将正则表达式理解为高级版的通配符。

1、正则表达式的基本单位/元字符

基本单位/元字符含义
平凡字符字面内容匹配
.匹配任一字符
[集合]集合内任意元素
[^集合]非集合内的任意元素
\d匹配数字
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符

举几个例子:
1、“Hello” 表示匹配字面内容Hello
2、"[abc]" 表示匹配a、b、c中的任一字符
3、"[a-zA-Z]" 表示匹配大小写字母中的任一字符
4、“a\b” 表示匹配连续出现的a和任一字符

2、正则表达式的重复限定符

正则表达式中连续出现的基本单位,如 “基本单位A基本单位B” 起到连接的作用,表示连续出现的A和B,但是对于过多连续出现的基本单位,只用元字符的方式进行书写就显得太繁琐了,这里就要引入正则表达式的重复限定符了。

重复限定符作用
*重复0~+∞次
?重复0或1次
+重复1~+∞次
{n}重复n次
{n,}重复n~+∞次
{n,m}重复n~m次

例如在该文件中
在这里插入图片描述
有:
在这里插入图片描述

3、正则表达式的定位符

为了使得搜索更加精确,我们需要在正则表达式中添加定位符
常见的定位符有

定位符作用
^匹配位于 行首 的字符串
$匹配位于 行尾 的字符串
\<匹配位于 单词开头 的字符串
\>匹配位于 单词结尾 的字符串
\b匹配一个单词边界,即从单词靠近空格的地方开始查找。
\B匹配非单词边界

之前已经提过,利用 “\< 和 \>” 可以完整地匹配一个单词,相当于 grep 命令中的 -w选项。

对于 4.2 正则表达式的重复限定符 中的temple文件,有
在这里插入图片描述

4、正则表达式的分组

重复限定符作用在左边最近的一个基本单位上,如果需要重复限定符对整个正则表达式生效,需要用到正则表达式的分组。正则表达式中用小括号()来做分组,也就是括号中的内容作为一个整体。
依旧以 4.2 正则表达式的重复限定符 中的temple为例
有以下操作
在这里插入图片描述

5、正则表达式中的转义字符

针对要匹配 “.”"+""*" 等需要把这些元字符、限定符或者关键字转义成普通的字符的情形,与转移字符的规则相同,只要在这些字符之前加上 “\” 即可。
如要匹配以 (ab) 开头的字符

$ grep -nE "^(\(ab\))" file

不难理解,最外面的括号用于表示分组,里面两个括号分别与 “\” 组合成转移字符

6、正则表达式中的条件或

正则表达式支持条件或,表示匹配满足分支条件中的任一种条件。

如在temple中进行以下操作

$ grep -nE "bo+k|(aba)+"  temple

结果如下
在这里插入图片描述


五、grep命令与管道的组合运用

管道可以运用于重定向,将一个程序或命令的输出作为另一个程序或命令的输入。这里通过xargs 将管道输入的数据转换成命令行参数。

以下是一个在多个.c文件中查找fun1.c函数定义的例子

$ find -name "*.c" |xargs grep -nE "func1.+{"

在这里插入图片描述


The end
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:52:14  更:2022-01-17 11:53:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:29:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码