linux中grep的用法详解,grep的基本用法详解
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的基本用法详解相关推荐
- linux mv时间,简介Linux中cp和mv搭配{,}在shel_l当中的用法
简介Linux中cp和mv搭配{,}在shel_l当中的用法 发布时间:2018-01-03 18:02 来源:互联网 当前栏目:web技术类 这篇文章主要介绍了简介Linux中cp和mv搭配{,}在 ...
- Linux中的文件搜索 locate,find,grep ,whereis和which命令的使用
1.文件搜索locate Linux locate命令用于查找符合条件的文档,它会去保存文档和目录名称的数据库mlocate内,查找合乎范本样式条件的文档或目录.一般情况我们只需要输入查找指定文件名字 ...
- linux切换用户无法加载变量,Linux 中用户切换:su 和 su- 的使用 环境变量详解
大部分Linux发行版的默认帐户是普通用户,而更改系统文件或者执行某些命令,须要root身份才能进行,这就须要从当前用户切换到root用户,Linux中切换用户的命令是su或su -,下面就su命令和 ...
- linux中修改权限命令,如何修改权限命令chmod用法
Linux中的Chmod命令用于更改或分配文件和目录的权限.在Linux/Unix系统中,文件和目录的可访问性是由文件所有权和权限决定的.在本教程中,我们将介绍chmod命令. chmod命令(cha ...
- Linux中chown、chmod、chgrp的区别和用法
chmod修改第1列内容,chown修改第3.4列内容,chgrp修改第4列内容: 先从文件属性开始. 目录 文件属性详解 chown chmod chgrp 文件属性详解 权限的计算是除去第一位字母 ...
- linux中quota信息查看,quota命令_Linux quota命令使用详解:显示磁盘已使用的空间与限制...
quota命令用于显示用户或者工作组的磁盘配额信息.输出信息包括磁盘使用和配额限制. 语法 quota(选项)(参数) 选项 -g:列出群组的磁盘空间限制: -q:简明列表,只列出超过限制的部分: - ...
- Linux中通过mkdir –p 能够创建多级目录(mkdir -p详解)
<!--一个博主专栏付费入口结束--><link rel="stylesheet" href="https://csdnimg.cn/release/p ...
- linux中以A开头的函数使用方式历程及详解
A开头的Linux C函数 abort 异常终止程序 abort函数在调用的时候,会触发SIGABRT信号 #include <stdlib.h> #include <signal. ...
- linux中使用u盘和光驱的命令_linux命令详解之挂载光驱的方法
linux的硬件设备在/dev目录下,光驱也是其中. /dev/cdrom表示光驱,挂载光驱的方法如下(以root身份): mkdir /mnt/cdrom mount -t auto -o ro ...
- Linux中python、C++和C语言的多线程用法整理(_thread、threading、thread和pthread)
目录 python3 开始学习Python线程 _thread 常量和函数: 锁对象 试用基本功能 试用线程同步 threading 函数 常量 类 线程本地数据 线程对象 锁对象 递归锁对象 条件对 ...
最新文章
- 找出现有Vector或ArrayList或数组中重复的元素给现有Vector或ArrayList或数组去重
- win10启动telnet
- 如何查看eas源代码_MT5CTP扩展:MT4源代码(EA)适配器来了
- rhel5.8安装oracle10g,RHEL 5.8 安装Oracle 10g r2 clusterware 报错
- 【招聘(上海)】美团酒店招聘 .NET 高级开发
- android水印添加水印,android 增加背景文字 水印效果(仿钉钉)
- 张朝阳寄语“校花”把参赛比做登山 走到不同阶段都是一种成就
- 网站后台输入密码错误
- Chrome谷歌浏览器插件
- wwwscan目录扫描器的逆向分析
- Element UI 中国省市区级联数据
- 中国近代史-蒋廷黻-笔记-第一章-剿夷与抚夷-第一节-英国请中国订立邦交
- 超详细超快的免费图床设置教程
- 女神节快乐 | 用编程语言解密京东云程序媛!
- int类型数组和bool类型数组互相转换
- stm32f405rgt6与as5048a的SPI通信问题
- python初学者学习简单教程
- 赵小楼《天道》《遥远的救世主》深度解析(124)遇事别怕,出事别躲
- dnf加物理攻击的卡片有哪些_DNF加物理攻击力的附魔宝珠有哪些
- 职场员工有没有潜力,看这一个能力就够了
热门文章
- 如何修改Word页面的显示大小
- 聊天室(C语言)- 基于文件编程、网络通信、数据库实现
- Linux下用C实现域名到IP的转换(域名解析)
- 海思Hi3518EV200(4)ISP简介
- [群晖]此套件需要您启动[pgsql-adapter.service]
- java sinh_Java Math.sinh() 方法
- 超文本传输协议-HTTP/1.1
- ASIC-WORLD Verilog(1)一日Verilog
- 同事辞职,留下了它 -让所有人都惊呆了!
- 搭建服务器性能监控面板(prometheus+grafana)