相信grep是UNIX和LINUX中使用最广泛的命令之一。grep(全局正则表达式版本)允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。grep支持基本正则表达式,也支持其扩展集。

本文主要讨论以下内容:

• grep(参数)选项。
• 匹配grep的一般模式。
• 只匹配字母或数字,或两者混用。
• 匹配字符串范围。

1. grep

grep 一般格式为:
grep [选项]基本正则表达式[文件]

2.双引号的使用

在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:“mystring”。这样做有两个原因,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串,例如:“jetplane”,如果不用双引号将其括起来,那么单词plane将被误认为是一个文件,查询结果
将返回“文件不存在”的错误信息。在调用变量时,也应该使用双引号,诸如:grep“$MYVAR”文件名,如果不这样,将没有返回结果。
在调用模式匹配时,应使用单引号。

3.grep选项
常用的grep选项有:

-c          只输出匹配行的计数。
-i          不区分大小写(只适用于单字符)。
-h          查询多文件时不显示文件名。
-l          查询多文件时只输出包含匹配字符的文件名。
-n          显示匹配行及行号。
-s          不显示不存在或无匹配文本的错误信息。
-v          显示不包含匹配文本的所有行。

4. grep举例

4.1 多文件查找

$ grep "sort"*.doc
或在所有文件中查询单词“ sort it”
$ grep "sort it" *
$ grep -c "48"data.f
$ 4
grep返回数字4,意义是有4行包含字符串“48”

显示满足匹配模式的所有行行数

[root@localhost /]# grep -n "48" data.f
1:48    Dec     3BC1997         LPSX    68.00   LVX2A   138
2:483     Sept    5AP1996         USP     65.00   LVX2C   189
5:484     nov     7PL1996         CAD     49.00   PLV2C   234
6:483     may     5PA1998         USP     37.00   KVM9D   644

显示不匹配的行

[root@localhost /]# grep -v "48" data.f
 47      Oct     3ZL1998         LPSX    43.00   KVM9D   512
 219     dec     2CC1999         CAD     23.00   PLV2C   68
 216     sept    3ZL1998         USP     86.00   KVM9E   234

大小写敏感

[root@localhost /]# grep -i "sept" data.f
483     Sept    5AP1996         USP     65.00   LVX2C   189
216     sept    3ZL1998         USP     86.00   KVM9E   234

5.正则表达式

5.1 模式匹配

假定要抽取代码为484和483的城市位置,上一章中讲到可以使用[ ]来指定字符串范围,这里用48开始,以3或4结尾,这样抽出484或483。

[root@localhost /]# grep "48[34]" data.f
483     Sept    5AP1996         USP     65.00   LVX2C   189
484     nov     7PL1996         CAD     49.00   PLV2C   234
483     may     5PA1998         USP     37.00   KVM9D   644

不匹配行首 如果要抽出记录,使其行首不是48,可以在方括号中使用^记号,表明查询在行首开始。

[root@localhost /]# grep '^[^48]' data.f
219     dec     2CC1999         CAD     23.00   PLV2C   68
216     sept    3ZL1998         USP     86.00   KVM9E   234

匹配任意字符

如果抽取以K开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字符:

[root@localhost /]# grep 'K...D' data.f
47      Oct     3ZL1998         LPSX    43.00   KVM9D   512
483     may     5PA1998         USP     37.00   KVM9D   644

日期查询

一个常用的查询模式是日期查询。先查询所有以5开始以1996或1998结尾的所有记录。使用模式5..199[6,8]。这意味着第一个字符为5,后跟两个点,接着是199,剩余两个数字是6或8。

[root@localhost /]# grep '5..199[68]' data.f
483     Sept    5AP1996         USP     65.00   LVX2C   189
483     may     5PA1998         USP     37.00   KVM9D   644

模式出现机率

抽取包含数字4至少重复出现两次的所有行,方法如下:

[root@localhost /]# grep '4/{2/}' data.f
483     may     5PA1998         USP     37.00   KVM9D   644

使用grep匹配“与”或者“或”模式

[root@localhost /]# grep -E '216|219' data.f
219     dec     2CC1999         CAD     23.00   PLV2C   68
216     sept    3ZL1998         USP     86.00   KVM9E   234

使用grep匹配“与”或者“或”模式

[root@localhost /]# grep -E '216|219' data.f
219     dec     2CC1999         CAD     23.00   PLV2C   68
216     sept    3ZL1998         USP     86.00   KVM9E   234

6 类名

类等价的正则表达式类等价的正则表达式
[[:upper:]]  [A-Z]
[[:lower:]]   [a-z]
[[:alnum:]]  [0-9a-zA-Z]
[[:space:]]  空格或tab键
[[:digit:]]  [0-9]
[[:alpha:]]  [a-zA-Z]

7 总结

希望大家已经理解了grep的灵活性,它是一个很强大而流行的工具,像其他许多UNIX工具一样,已经被使用在DOS中。如果要通过文件快速查找字符串或模式, grep是一个很好的选择。简单地说, grep是shell编程中很重要的工具。

shell脚本系列-grep用法总结相关推荐

  1. Shell脚本之grep用法

    grep:强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来. 用法: grep [选项] '搜索字符串' filename 选项: -a:以文本文件方式搜索 -c:计算找到的符合行的 ...

  2. 详细介绍Linux shell脚本系列基础学习(列表)

    本系列适合Linux初学者,属于Linux入门级教程,主要介绍了Shell的分类.语法格式以及脚本的使用和编写格式等. 不断更新中,是Shell学习的必读经典教程.现主要包含以下文章: Linux S ...

  3. shell脚本系列:1、shell、bash和shell脚本

    shell脚本系列:1.shell.bash和shell脚本 文章目录 shell脚本系列:1.shell.bash和shell脚本 1. 前言 2. shell.Bash.shell script简 ...

  4. linux shell 博客,【博客侠】Linux Shell脚本系列:开始上手(1)

    看标题大家应该知道,这是一个关于 Linux Shell 脚本的系列文章.通过本系列文章希望帮助 Linux 初学用户快速开始上手编写 Shell 脚本,能够利索的对脚本进行测试和使用. 在接下来的首 ...

  5. Linux求平方脚本,Linux Shell脚本系列教程(五):数学运算

    这篇文章主要介绍了Linux Shell脚本系列教程(五):数学运算,本文讲解了使用let.(())和[]进行算术运算.使用expr进行算术运算.使用bc进行算术运算三种方法,需要的朋友可以参考下 在 ...

  6. shell脚本系列:5、shell参数

    shell脚本系列:5.shell参数 文章目录 shell脚本系列:5.shell参数 1. 位置参数 2. 特殊参数 2.1 参数* 2.2 参数@ 2.3 参数# 2.4 参数? 2.5 参数- ...

  7. shell脚本之echo用法

    shell脚本之echo用法 1.echo常见转义符号 符号 功能描述 \b 退格键(backspace) \f 换行但光标仍停留在原来的位置 \n 换行且光标移至行首 \r 光标移至行首但不换行 \ ...

  8. 1025.在线视频—shell脚本系列讲座(三)千机变—脚本变量

    shell脚本系列讲座有以下主题 (一)shell脚本与应用示例 (二)三剑客-文本处理 (三) 千机变-脚本变量 (四)向左向右-条件选择 (五)望山跑死马-循环 (六)脚本函数与任务调度 (七)脚 ...

  9. shell脚本中的$用法

    shell脚本中的$用法 变量 含义 $0 shell脚本的文件名 $1 ~ $n 添加到shell脚本中的各参数: 即执行shell脚本时后跟的内容: $1为第1参数,$2为第2参数 $? shel ...

最新文章

  1. sql server面试题
  2. python设计一个学生类求最高分_设计一个学生类班级类
  3. 因为一个跨域请求,我差点丢了饭碗!
  4. python range从大到小排列_python 十大经典排序算法
  5. 使用之location和rewrite用法
  6. jquery是库还是框架?
  7. 图像处理作业 第8次
  8. 如何创建Java程序
  9. pandas读写各种类型数据
  10. 哈佛大学计算机生物科学,生命科学专业
  11. 如何绘制逻辑图 — 3.要素的属性:粒度与分层
  12. c++ winpcap开发(3)
  13. go-文件读写-db
  14. PyCharm下解决Unresolved Reference问题
  15. centos7安装mysql5.7视频_Centos7安装MySQL5.7版本详细步骤
  16. php5.3之后如何加载zend
  17. js深入研究之神奇的匿名函数类生成方式
  18. Java项目开发工具汇总
  19. 在命令行英雄的浏览器大战中,JavaScript令人惊讶地崛起
  20. 推荐一款基于bootstrap的漂亮的前端模板——inspinia_admin(国内翻译的叫 H+后台主题UI框架)

热门文章

  1. B0505S-1WR3 隔离模块DC/DC
  2. python面向对象之面向对象三要素
  3. 第14章-Spring AOP通知(Advice)详解
  4. PCA降维(主成分分析法)
  5. python荣联云通讯短信平台
  6. 好看的table css样式
  7. 怎么用Q-Q图验证数据集的分布
  8. chrome表单自动填充默认样式-autofill
  9. U3D: 先激活、在操作,才能起作用
  10. Win10+Python3+OpenCV+CUDA——在win中配置OpenCV4.5并与Python环境绑定