grep的基本用法详解

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

一、初识grep

grep: Global search Regular Experssion and Printout 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、实现位置锚定

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

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

\<: 写在要查找的单词模式的左侧,做单词词首锚定

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

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

\<pattern\>: 匹配单词

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 "\<work\>" test.txt | wc -l

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

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

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

grep "\(\<[[:alpha:]]\+\>\).*\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总线上的代号,该代号在整个系统中是唯一的。(因为当前系统上有两块网卡,所以有两条信息)
[[email protected] 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即是网卡设备的驱动名称
[[email protected] tmp]# find /sys/bus/pci/drivers | grep "02:01.0"
/sys/bus/pci/drivers/e1000/0000:02:01.0

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

时间: 2024-09-30 04:33:29

grep的基本用法详解的相关文章

正则表达式及grep 、 egrep用法详解

         正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符(元字符).及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻   辑.其中的元字符不表示字符本身的意义,而是用于表达控制或通配等功能: 对象:字符串 组成:元字符+正常字符 功用:过滤文本字符,查找匹配字符并得出结果,供其它命令使用 作用对象:文本字符(文本文件里面的内容) 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1

grep, egrep及相应的正则表达式用法详解

grep, egrep及相应的正则表达式用法详解 一.grep/egrep Global search REgular expression and Print out的简写,是一种强大的文本搜索工具,它根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. linux使用GNU版本的grep.它功能更强,可以通过-E.-F命令行选项来使用egrep和fgrep的功能(fgrep不使用

grep用法详解 grep与正则表达式

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 主要参数    [options]主要参数:    -c:只输出匹配行的计数.    -I:不区分大 小写(只适用于单字符).    -h:查询多文件时不显示文件名.    -l:查询多文件时只输出包含匹配字符的文件名.    -n:显示匹配行及 行号.    -s

(转)linux 中特殊符号用法详解

linux 中特殊符号用法详解 原文:https://www.cnblogs.com/lidabo/p/4323979.html # 井号 (comments)#管理员  $普通用户 脚本中 #!/bin/bash   #!/bin/sh井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行. # This line is comments.echo "a = $a" # a = 0由于这个特性,当临时不想执行某行指令时,只需在该行开头加上 # 就

1.12-linux三剑客之awk用法详解

1.12 linux三剑客之awk用法详解 内容: 1. awk执行过程 2. awk命令格式 3. awk用法 4. awk数组 第1章 awk执行过程 一直读取到文件的最后一行 第2章 awk '找谁{干啥}' '模式{动作}' 模式 pattern   动作  action 第3章 awk中什么可以作为模式 正则表达式 比较表达式    NR>10 范围模式 特殊模式BEGIN{}和END{} awk支持正则中的特殊符号 3.1 正则表达式 测试文件/server/files/reg.tx

Ansible系列命令用法详解与使用

Ansible系列命令用法与使用 在上一个文章中已经完成了Ansible的安装,这片文章主要的用来记录Ansible一些命令的用法详解及其使用场景.好了非话不多说,'上菜吧'. Ansible命令行执行方式有Ad-hoc.Ansible-playbook两种方式.Web化执行方式其官方提供了付费产品Tower(10台以内免费),个人的话可以基于API开发类似的Web化产品.此篇文章主要针对于Ad-hoc.Ansible-playbook两种方式做详细介绍. 什么是Ad-hoc.Ansible-p

js的offsetParent属性用法详解

js的offsetParent属性用法详解:此属性是javascript中较为常用的属性,对于它的良好掌握也是非常有必要的,下面就通过代码实例介绍一下它的用法,希望能够给需要的朋友带来一定的帮助.一.基本介绍:此属性可以返回距离指定元素最近的采用定位(position属性值为fixed.relative或者absolute)父级元素,如果父级元素中没有采用定位的元素,则返回body对象的引用.语法结构: obj.offsetParent 二.代码实例: <!DOCTYPE html> <

python处理word文件:win32com用法详解

目标:用python处理doc文件 方法:引入win32com模块 ************************************************************************** 一.安装 ************************************************************************** 首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了...) 下载地址:http

jQuery 事件用法详解

jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jquery中文文档 简介 jquery 之所以成为最受欢迎的前端库,很大一部分是得益于它的事件具有良好的语义,优秀的兼容性,并且便于管理和扩展. 在这里我会介绍 jquery 事件的一些比较基础的用法. 实现原理 jquery 事件脱胎于浏览器的 addEventListener (W3) 和 attac