许多时候需要从一大堆的命令输出或文本内容中找出一两行关键的内容,例如从系统用户文件中查找某个用户。如果不借助工具,这将是一项非常繁琐的工作,这时可以使用grep工具对内容进行筛选。

grep(global regular expression print,全局正则表达式打印),来源于最早的行编辑器ed。grep是管理和维护系统时经常用到的一个工具。

一、grep的基本格式

命令格式:

grep [option] pattern [file(file-list)]

grep工具在文件file中查找与字符串pattern匹配的内容,如果找到,则将整行输出到标准输出。

常用选项:

i:忽略大小写。

n:将结果输出的同时,也输出该行的行号。

s:在没有找到匹配的内容时,不显示错误信息。

l:从多个文件中查找时,只输出找到匹配内容的文件名称。

h:从多个文件中查找时,只输出匹配的内容,不显示文件名称。

c:只输出匹配内容的总行数。

v:反转查找,即输出匹配内容以外的行。

grep工作时,总是以行为单位查找。首先将文本的第1行读入缓冲区并执行查找,如果找到匹配的字符串,则输出整行。否则就丢弃缓冲区内容并读入下一个文本行继续查找,直到文本结束。

二、使用grep查找文本

示例文本文件students内容如下:

[root@localhost zhu]# cat students
Liulu Sichuan Lixia //
Liumin Henan lixia //
Xuli Jiangsu Luolei //
Xiayu Shanxi Hetao //
Liwei Sichuan tangwei //
Heli Xizang Tangwei //
Wangtao Yunnan Huli //

(1)查找关键字

[root@localhost zhu]# grep "" students
Xuli Jiangsu Luolei //
Xiayu Shanxi Hetao //
Liwei Sichuan tangwei //
Heli Xizang Tangwei //

(2)显示行号

[root@localhost zhu]# grep -n "" students
: Xuli Jiangsu Luolei //
: Xiayu Shanxi Hetao //
: Liwei Sichuan tangwei //
: Heli Xizang Tangwei //

(3)统计结果

[root@localhost zhu]# grep -c "Xizang" students

(4)大小写敏感

[root@localhost zhu]# grep "tangwei" students
Liwei Sichuan tangwei //
[root@localhost zhu]# grep "Tangwei" students
Heli Xizang Tangwei //
#使用选项i查找时忽略大小写
[root@localhost zhu]# grep -i "tangwei" students
Liwei Sichuan tangwei //
Heli Xizang Tangwei //

(5)反转查找

查询辅导员不是Tangwei和Lixia的学生情况:

[root@localhost zhu]# grep -vi "tangwei" students | grep -vi "lixia"
Xuli Jiangsu Luolei //
Xiayu Shanxi Hetao //
Wangtao Yunnan Huli //

这条命令中的第一个grep先输出不含有Tangwei的所有行,然后通过管道将结果传递给第二个grep命令,第二个命令输出不含有Lixia的所有行。

(6)多文件查找

有时候需要从多个文件中查找一些相关联的内容,这时就要用到多文件查询。例如管理员要从目录/etc的文件中查找有关root用户的内容:

[root@localhost zhu]# grep -l "root" /etc/*
/etc/aliases
/etc/aliases.db
/etc/anacrontab
/etc/crontab
/etc/gpm-root.conf
/etc/group
...

grep输出了目录/etc中所有含有root字符串的文件名。

查询密码文件/etc/passwd和影子文件/etc/shadow中含有字符串root的所有行,并且不显示文件名称:

[root@localhost zhu]# grep -h "root" /etc/passwd /etc/shadow
root:x:::root:/root:/bin/bash
operator:x:::operator:/root:/sbin/nologin
root:$$t4$eOBy2Gb9IAyS.1WiFU1bU.:::::::

(7)在命令输出和变量中查找

grep不仅可以从文件中查询字符串,还可以从字符串和字符串变量中查询:

#使用grep在命令输出中查找
[root@localhost zhu]# echo "Welcome to Beijing" | grep "to Beijing"
Welcome to Beijing
#使用grep在变量中查找
[root@localhost zhu]# A="Welcome to Beijing"
[root@localhost zhu]# echo $A | grep "Beijing"
Welcome to Beijing
#使用变量保存查找的字符串
[root@localhost zhu]# A="Beijing"
[root@localhost zhu]# echo "Welcome to Beijing" | grep "$A"
Welcome to Beijing

注意:在使用grep查找时,被查找的字符串可以不使用引号。但在被查找的字符串中有空格或被查询的字符串保存在一个变量中时,应该使用引号以免被grep误解为一个命令或参数。

三、行首、行尾匹配查找

文本的行首、行尾通常用于保存特殊意义的字段,例如产品序号、销售额等内容,因此从行首和行尾匹配查找可能会比较频繁。

1、行首匹配

查询文件students中所有2008年入学的学生:

[root@localhost zhu]# grep '^28' students
Liulu Sichuan Lixia //
Liumin Henan lixia //

使用行首匹配显示第5、6个字符为02的所有行:

[root@localhost zhu]# grep '^....02' students
Liulu Sichuan Lixia //
Liumin Henan lixia //
Xuli Jiangsu Luolei //
Xiayu Shanxi Hetao //

2、行尾匹配

例如查找平均成绩85以上的学生情况:

[root@localhost zhu]# grep -v '[0-7][0-9]$' students | grep -v '8[0-4]$'
Liwei Sichuan tangwei //

当然也可以配合常用的正则表达式查找。

四、使用或、与多模式匹配查找

(1)或匹配模式

使用参数E让grep命令将要匹配的字符串延伸为一个普通的表达式,此时可以使用“|”表示或匹配模式,即只需要匹配两个字符串中的任意一个即可。

例如查询来自河南和云南学生的详细情况:

[root@localhost zhu]# grep -E 'Henan|Yunnan' students
Liumin Henan lixia //
Wangtao Yunnan Huli //

(2)与模式匹配

然而参数E并不支持与匹配模式查询,此时可以使用多条件管道实现。例如要查询名叫Lixia的学生中有哪些来自Sichuan:

[root@localhost zhu]# grep -i "Lixia" students | grep "Sichuan"
Liulu Sichuan Lixia //

五、grep工具应用实例

1、精简配置文件

在Linux系统中,管理员经常接触到各种类型的服务器配置文件。这些配置文件通常都使用了一个通用的注释格式,即使用井号“#”(通常是注释信息)或“;”(通常标志该行是默认设置)作为开头标志。配置文件中的注释信息和默认配置语句行写得非常详细,这些语句行比真正起作用的配置往往多出数十倍,甚至更多。

通常情况下,熟悉这些配置文件的管理员会使用grep工具的参数v精简这些配置文件,让这些配置文件的可读性更高,更方便修改。此处以精简Samba服务器的配置文件smb.conf为例:

[root@localhost zhu]# cp /etc/samba/smb.conf ./
[root@localhost zhu]# mv smb.conf smb.conf_backup
[root@localhost zhu]# cat smb.conf_backup | grep -v '#' | grep -v '^;' | grep -v '^$' >smb.conf

2、从系统管理命令输出中查找

grep工具是Linux中最常用的命令之一,管理员需要经常使用它对命令结果执行筛选,以便查看关键内容。

例如从服务列表中筛选出蓝牙服务,以便于查看这个服务在不同运行级别中的启动状态:

[root@localhost zhu]# chkconfig --list | grep bluetooth
bluetooth :off :off :on :on :on :on :off

查找文本工具grep的更多相关文章

  1. Linux查找命令:grep,awk,sed

    grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ...

  2. 24-Ubuntu-文件和目录命令-查找文件内容-grep

    grep Linux系统中grep命令是一种强大的文本搜索工具. grep允许文本文件进行模式查找,所谓模式查找,又被称为正则表达式. 选项 含义 -n 显示匹配行及行号 -v 显示不包括匹配文本的所 ...

  3. 查找命令中grep,find,which和whereis的使用及区别

    在linux系统中,许多时候需要查找某些文件或者字符,如果用ls, cd 等基础命令就显得很无力了,那么Linux提供了grep,find,which 三种查找命令,在这里我记录一下: 一.grep命 ...

  4. Linux命令-文件文本操作grep

    文件文本操作 grep 在文件中查找符合正则表达式条件的文本行 cut 截取文件中的特定字段 paste 附加字段 tr 字符转换或压缩 sort 调整文本行的顺序,使其符合特定准则 uniq 找出重 ...

  5. 我的运维之旅-查找文本的linux命令

    小伙伴们肯定都遇到这么尴尬场景,线上服务出问题了,老大一直在问什么问题导致的,而你由于对查找文本的命令不太熟,鼓捣了半天才找到那条 异常日志,而这时可能半个小时都已经过去了.老大可能对你失望透顶了.讲 ...

  6. [转帖]linux下的find文件查找命令与grep文件内容查找命令

    linux下的find文件查找命令与grep文件内容查找命令 https://www.cnblogs.com/shileima/p/8431393.html 在使用linux时,经常需要进行文件查找. ...

  7. android html 图片处理类--加载富文本工具类

    在android开发中,一些资讯类页面,里面有html标签和图片,html 标签一般通过Html.fromHtml方法,即可以解决,但是如果html 有图片标签,那么,Html.fromHtml 好像 ...

  8. NSIS查找文本中是否包含某个字串

    !include "textfunc.nsh"!include "logiclib.nsh"OutFile "find.exe"#文本文件a ...

  9. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

随机推荐

  1. Python 正则表达式中级

    首先是?:   在括号中用?:用在findall和split之中,去除括号优先级. 如果不用只输出括号内匹配的值 r   的作用是转义python里面换行符等,像是\n 不用加\来转义 1.子表达式 ...

  2. 「TJOI 2018」教科书般的亵渎

    「TJOI 2018」教科书般的亵渎 题目描述 小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为 \(a_i\) ,且每个怪物血量均不相同, 小豆手里有无限张"亵渎" ...

  3. [HNOI2012]集合选数 --- 状压DP

    [HNOI2012]集合选数 题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出\({1,2,3,4,5}\)的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x ...

  4. PHPredis长连接pconnect

    1. 当使用pconnect时,连接会被重用,连接的生命周期是fpm进程的生命周期,而非一次php的执行. 疑惑1: fpm进程的生命周期是指 当前那个还是指所有:    php-fpm通常是1个ma ...

  5. Codeforces Round #304 (Div. 2) Break the Chocolate 水题

    Break the Chocolate Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/546/ ...

  6. codeforces 148E Aragorn's Story 背包DP

    Aragorn's Story Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/probl ...

  7. Papilio Pro Boards

    http://papilio.cc/index.php?n=Papilio.PapilioOne The Papilio is an Open Source FPGA development boar ...

  8. Installshield 2010 中集成. Net framework4 与 vc++ 2010运行安装包

    1.prq的地址,通过以下地址,下载相应的prq文件 VC 2010 redist X86: http://saturn.installshield.com/is/prerequisites/micr ...

  9. linux 多线程查看工具

    参考: http://www.oschina.net/translate/command-line-tools-to-monitor-linux-performance?cmp&p=1 htt ...

  10. win7 64位搭建scrapy(转)

    win7 64位系统依赖的scrapy文件链接:http://pan.baidu.com/s/1mgJS7BM 一个很好的python 64位包下载页面:http://www.lfd.uci.edu/ ...