文章目录

  • 一、开发环境介绍
  • 二、Linux中grep的作用
  • 三、grep命令使用格式和常用选项
  • 四、grep中常用的正则表达式
    • 1、正则表达式的基本单位/元字符
    • 2、正则表达式的重复限定符
    • 3、正则表达式的定位符
    • 4、正则表达式的分组
    • 5、正则表达式中的转义字符
    • 6、正则表达式中的条件或
  • 五、grep命令与管道的组合运用

一、开发环境介绍

本文使用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命令有以下常用选项:

OPTION DESCRIPTION FUNCTION
-n line number 显示行号
-E extended-regexp 使用拓展正则表达式规则
-F fixed-strings 不使用正则表达式规则
-i ignore-case 无视大小写
-c count 只显示匹配总数,不显示匹配行号
-w word-regexp 把pattern作为一个单词匹配
-v invert-match 反向匹配,匹配结果为不包含匹配文本的所有行
-l –files-with-matches 列出包含匹配项的文件名
-L files-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

【Linux】grep命令与正则表达式(RegExp)相关推荐

  1. Linux     grep命令,正则表达式

    grep命令及正则表达式 grep命令 grep , egrep , fgrep grep,sed,awk 文本处理三剑客 grep: Global search REgular expression ...

  2. linux grep命令参数及用法详解---linux管道命令grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  3. linux grep命令总结

    风生水起 善战者,求之于势,不责于人,故能择人而任势. 博客园    首页    新随笔    联系    订阅    管理 posts - 791,  comments - 394,  trackb ...

  4. Linux grep 命令初步学习

    Linux grep 命令用于查找文件里符合条件的字符串. grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显 ...

  5. Linux grep命令、Linux cd命令、Linux pwd命令

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Linux grep命令用于查找文件里符合条件的字符串. grep指令用于查找内容包含指定的范本样式 ...

  6. linux grep命令例子,详解linux grep命令

    本文介绍了linux grep命令,具体如下: 1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regu ...

  7. 【Shell牛客刷题系列】SHELL5 打印空行的行号:一起学习grep命令搭配正则表达式的使用

    该系列是基于牛客Shell题库,针对具体题目进行查漏补缺,学习相应的命令. 刷题链接:牛客题霸-Shell篇. 该系列文章都放到专栏下,专栏链接为:<专栏:Linux>.欢迎关注专栏~ 本 ...

  8. Linux之grep命令与正则表达式

    文章目录 grep命令 知识储备 正则表达式 1. 正则表达式的分类 1. 普通正则表达式 2. 拓展正则 案例 grep命令 Linux三剑客之一,文本过滤器(根据文本内容过滤文件) 语法格式:gr ...

  9. Linux的gre命令匹配数字,linux之grep命令和正则表达式练习

    1.创建一个文档FILE,里面写如下内容: he love his lover she like her liker they love their liker 使用grep命令来搜索以l开头,以e结 ...

最新文章

  1. 计算机的网络端口管理器,Win7设备管理器没有端口选项的三大原因及解决措施...
  2. 用Redux来进行组件间通讯
  3. Android开发之购物车加减按钮(附加源码)
  4. 华为手机出现android啥意思,传华为正研发手机系统,如果脱离安卓系统,还有啥能阻止华为前进...
  5. Google Bigtable
  6. java堆内存和堆外内存_Java堆空间,本机堆和内存问题
  7. 全套学习!mysql命令窗口执行sql文件
  8. 蓝牙耳机音量大解决办法_长时间使用蓝牙耳机的危害这么大?我们到底该选什么蓝牙耳机呢?...
  9. 使用webpack打包后的vue项目如何运行(express)
  10. 10月10日见!官方再曝OPPO K5外观配置细节:6400万超清四摄加持
  11. C语言学习笔记---打印函数printf()和sprintf()函数
  12. 王者荣耀战力查询微信小程序源码下载支持安卓苹果微信Q等多区查询
  13. 数据结构严蔚敏--综述
  14. 如何保证同一个账号同时只能在一个设备登录,账号自动登录
  15. 步步为营Hibernate全攻略(二)剪不断理还乱之:一对多关联映射
  16. 5G发展的五大动力和四大挑战
  17. 笔记:echarts 标题(title)设置
  18. 联想电脑的手触屏失灵
  19. 如果没有杰顿·桑乔,谁应该曼彻斯特联合标志
  20. 岗位来啦-华为研发OD招聘

热门文章

  1. LoadRunner 回放出错
  2. VS-Code的使用
  3. 机器学习-支持向量机SVM算法
  4. c# 扫描局域网IP列表的几种方法
  5. MATLAB的线性规划工具
  6. 计算机word知识试题及答案,计算机二级考试word试题及答案
  7. git命令行修改用户名密码
  8. FLASH知识及读写擦除规则
  9. Github创建个人博客
  10. 3.神经网络-深度学习入门