grep是linux上常用的一个文本处理工具之一。它有着强大的文本处理能力,学会它,可以让工作更有效率。

一、初识grep

grep: Global search Regular Experssion and Print out line

从名字上也可以直观的了解到它是基于正则表达式进行全局搜索,并把结果打印到屏幕上来。

说白了,它就是根据用户指定的“模式(pattern)”来对文本进行过滤,并显示匹配到的行的文本搜索工具。

二、何为“模式”

所谓模式,就是由一类字符书写,但是这些字符不表示字符本身字面的意义,而是表示控制或通配的功能。它还有一个高雅的名字,即正则表达式。

三、了解正则表达式

1、基本的元字符

.   匹配任意的字符

*   匹配其前面的字符任意次数,0,1或多次

\?  匹配其前面的字符0次或1次

\+  匹配其前面的字符1次以上

2、按字符匹配:

.:   匹配任意单个字符

[]:   匹配指定集合中的任意单个字符

常用的字符集合:

[[:digit:]],[0-9]  表示0-9的任意数字

[[:lower:]], [a-z]  表示26个小写英文字母

[[:upper:]], [A-Z]  表示26个大写英文字母

[[:alpha:]], [a-zA-Z] 表示所有英文字母

[[:alnum:]], [[0-9a-zA-Z] 表示数字,所有英文字母

[[:space:]]  表示空白字符

[[:punct:]]  表示符号字符

[^]:  匹配指定集合外的任意单个字符

3、按匹配次数匹配:

* : 匹配其前面任意字符任意次数

\?: 匹配其前面的字符0次或1次

\+: 匹配其前面的字符出现至少1次

\{m\}: 匹配其前面的字符出现m次

\{m,n\}: 匹配其前面的字符至少m次,至多n次

.* : 常用组合,表示任意长度的任意字符

4、实现位置锚定

^ : 写在模式的最左侧,表示锚定行首

$ : 写在模式的最右侧,表示锚定行尾

\<:>

\>: 写在要查找的单词模式的右侧,做单词词尾锚定

^$: 常用组合,表示空白行

\: 匹配单词

5、实现分组(只要功能可以用于实现后向引用)

\(\): 在模式中,如果使用了分组,在某行文本检测中,如果\(\)匹配到了某内容,此内容可以在后面的模式中被引用。

\# : 引用之前被\(\)所匹配到的内容,模式自左而右,引用第#个左括号以及其匹配右括号之间的模式匹配到的内容。

三、grep命令

1、基本语法:

grep [OPTIONS] PATTERN [FILE…]

常用选项:

-i, –ignore-case  : 忽略字符大小写

-o, –only-matching : 只显示被模式匹配到的内容

-v, –invert-match : 反向选取,显示被模式匹配到的内容的相反内容

-A #,–after-context=#: 显示被模式匹配到的行和此行之后的#行

-B #,–before-context=#: 显示被模式匹配到的行和此行之前的#行

-C #,–context=#: 显示被模式匹配到的行和此行前后的#行

-r, -R, –recursive: 递归查询,对目录下的子目录也会进行查询

-E, –extended-regexp: 使用扩展正则表达式进行匹配,相当于egrep

-F, –fixed-strings: 不使用正则表达式经行匹配,即忽略元字符的意义,相当于fgrep

–color={never,always,auto}:可以设置颜色显示,可以进行别名,方便使用。例如:alias grep='grep –color=auto'

四、知识点练习

接下来我们以以下文本文件的内容来进行练习

练习1:显示b出现3次以上的行

grep "b\{3,\}" test.txt

练习2:统计文本文件中work|WORK出现的次数

grep -i -o "\" test.txt | wc -l

练习3:显示所有包含符号的行

grep "[[:punct:]]" test.txt

练习4:找出其中最后一个单词是由此前某单词加er构成的行。

grep "\(\\).*\1er" test.txt

五、实际的应用

有了以上的知识储备,我们就可以用grep来进行一些基本的处理工作了。

1、在/etc/passwd上查找以/sbin/nolog结尾的行,即可以使用以/bin/nologin为结束的位置锚定进行选取

grep "/sbin/nologin$" /etc/passwd

2、在/etc/passwd上查找用户id和组id在500到1099之间的行

grep "\<1\?[05][0-9][0-9]\>" /etc/passwd

3、查找当前系统上网卡驱动程序的名称

#显示pci设备中网卡的信息

#最前面的 “02:01.0” 就是设备在PCI总线上的代号,该代号在整个系统中是唯一的。(因为当前系统上有两块网卡,所以有两条信息)

[root@localhost tmp]# lspci | grep "Ethernet"

02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)

02:05.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)

#sys目录是内核将设备信息映射出来的一个伪文件系统,所以我们查找到的那一行信息中drivers的子目录e1000即是网卡设备的驱动名称

[root@localhost tmp]# find /sys/bus/pci/drivers | grep "02:01.0"

/sys/bus/pci/drivers/e1000/0000:02:01.0

其实要做的事也就2步,然后我们可以把这些命令通过管道(|)来把命令连接起来,实现功能。

原创文章,作者:封于修,如若转载,请注明出处:http://www.178linux.com/4746

linux中grep的用法详解,grep的基本用法详解相关推荐

  1. linux mv时间,简介Linux中cp和mv搭配{,}在shel_l当中的用法

    简介Linux中cp和mv搭配{,}在shel_l当中的用法 发布时间:2018-01-03 18:02 来源:互联网 当前栏目:web技术类 这篇文章主要介绍了简介Linux中cp和mv搭配{,}在 ...

  2. Linux中的文件搜索 locate,find,grep ,whereis和which命令的使用

    1.文件搜索locate Linux locate命令用于查找符合条件的文档,它会去保存文档和目录名称的数据库mlocate内,查找合乎范本样式条件的文档或目录.一般情况我们只需要输入查找指定文件名字 ...

  3. linux切换用户无法加载变量,Linux 中用户切换:su 和 su- 的使用 环境变量详解

    大部分Linux发行版的默认帐户是普通用户,而更改系统文件或者执行某些命令,须要root身份才能进行,这就须要从当前用户切换到root用户,Linux中切换用户的命令是su或su -,下面就su命令和 ...

  4. linux中修改权限命令,如何修改权限命令chmod用法

    Linux中的Chmod命令用于更改或分配文件和目录的权限.在Linux/Unix系统中,文件和目录的可访问性是由文件所有权和权限决定的.在本教程中,我们将介绍chmod命令. chmod命令(cha ...

  5. Linux中chown、chmod、chgrp的区别和用法

    chmod修改第1列内容,chown修改第3.4列内容,chgrp修改第4列内容: 先从文件属性开始. 目录 文件属性详解 chown chmod chgrp 文件属性详解 权限的计算是除去第一位字母 ...

  6. linux中quota信息查看,quota命令_Linux quota命令使用详解:显示磁盘已使用的空间与限制...

    quota命令用于显示用户或者工作组的磁盘配额信息.输出信息包括磁盘使用和配额限制. 语法 quota(选项)(参数) 选项 -g:列出群组的磁盘空间限制: -q:简明列表,只列出超过限制的部分: - ...

  7. Linux中通过mkdir –p 能够创建多级目录(mkdir -p详解)

    <!--一个博主专栏付费入口结束--><link rel="stylesheet" href="https://csdnimg.cn/release/p ...

  8. linux中以A开头的函数使用方式历程及详解

    A开头的Linux C函数 abort 异常终止程序 abort函数在调用的时候,会触发SIGABRT信号 #include <stdlib.h> #include <signal. ...

  9. linux中使用u盘和光驱的命令_linux命令详解之挂载光驱的方法

    linux的硬件设备在/dev目录下,光驱也是其中. /dev/cdrom表示光驱,挂载光驱的方法如下(以root身份): mkdir /mnt/cdrom mount  -t auto  -o ro ...

  10. Linux中python、C++和C语言的多线程用法整理(_thread、threading、thread和pthread)

    目录 python3 开始学习Python线程 _thread 常量和函数: 锁对象 试用基本功能 试用线程同步 threading 函数 常量 类 线程本地数据 线程对象 锁对象 递归锁对象 条件对 ...

最新文章

  1. 找出现有Vector或ArrayList或数组中重复的元素给现有Vector或ArrayList或数组去重
  2. win10启动telnet
  3. 如何查看eas源代码_MT5CTP扩展:MT4源代码(EA)适配器来了
  4. rhel5.8安装oracle10g,RHEL 5.8 安装Oracle 10g r2 clusterware 报错
  5. 【招聘(上海)】美团酒店招聘 .NET 高级开发
  6. android水印添加水印,android 增加背景文字 水印效果(仿钉钉)
  7. 张朝阳寄语“校花”把参赛比做登山 走到不同阶段都是一种成就
  8. 网站后台输入密码错误
  9. Chrome谷歌浏览器插件
  10. wwwscan目录扫描器的逆向分析
  11. Element UI 中国省市区级联数据
  12. 中国近代史-蒋廷黻-笔记-第一章-剿夷与抚夷-第一节-英国请中国订立邦交
  13. 超详细超快的免费图床设置教程
  14. 女神节快乐 | 用编程语言解密京东云程序媛!
  15. int类型数组和bool类型数组互相转换
  16. stm32f405rgt6与as5048a的SPI通信问题
  17. python初学者学习简单教程
  18. 赵小楼《天道》《遥远的救世主》深度解析(124)遇事别怕,出事别躲
  19. dnf加物理攻击的卡片有哪些_DNF加物理攻击力的附魔宝珠有哪些
  20. 职场员工有没有潜力,看这一个能力就够了

热门文章

  1. 如何修改Word页面的显示大小
  2. 聊天室(C语言)- 基于文件编程、网络通信、数据库实现
  3. Linux下用C实现域名到IP的转换(域名解析)
  4. 海思Hi3518EV200(4)ISP简介
  5. [群晖]此套件需要您启动[pgsql-adapter.service]
  6. java sinh_Java Math.sinh() 方法
  7. 超文本传输协议-HTTP/1.1
  8. ASIC-WORLD Verilog(1)一日Verilog
  9. 同事辞职,留下了它 -让所有人都惊呆了!
  10. 搭建服务器性能监控面板(prometheus+grafana)