Linux核心应用命令速查
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.7 grep:查找字符串

作用:查找文件里符合条件的字符串。

用法:grep [选项] <pattern> <files>

主要选项如下。

● -E:每个模式作为一个扩展的正则表达式对待。

● -F:每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。

● -b:在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。

● -c:只显示匹配行的数量。

● -I:比较时不区分大小写。

● -h:在查找多个文件时,指示grep不要将文件名加入到输出之前。

● -l:显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。

● -n:在输出前加上匹配串所在行的行号(文件首行行号为1)。

● -v:只显示不包含匹配串的行。

● -x:只显示整行严格匹配的行。

● -e expression:指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。

● -f expfile:从expfile文件中获取要搜索的模式,一个模式占一行。

<pattern>表示正则表达式。

正则表达式是Linux/UNIX系统中非常重要的概念。正则表达式(也称为“regex”或“regexp”)是一个可以描述一类字符串的模式(Pattern)。如果一个字符串可以用某个正则表达式来描述,我们就说这个字符串和该正则表达式匹配(Match)。这和DOS中用户可以使用通配符“*”代表任意字符类似。在Linux系统中,正则表达式通常被用来查找文本的模式,以及对文本执行搜索/替换操作和其他功能。

应用实例如下。

(1)查找文件“file.php”中是否包含字符串“html”

        # grep 'html' file.php

(2)检查/etc/passwd文件中是否有可疑用户

Linux中/etc/passwd文件是存储系统用户密码等重要信息的文件,黑客入侵系统后往往会使用在passwd文件中增加特权用户的方法为自己留个后门。所以,我们要经常查看,如果你的系统用户较少,你可以采用直接查看passwd文件的方法,命令为“cat /etc/passwd”。如果你的系统有成百上千个用户,那么直接查看就不行了,不过我们只要检测其中是否有UID为0的特权用户就行了,这时可以使用以下命令来实现:

        # grep '0:0' /etc/passwd

说明:

grep命令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep命令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep命令会从标准输入设备读取数据。要用好grep这个工具,其实就是要写好正则表达式。下面是正则表达式应用实例。

(3)通过管道过滤ls -l输出的内容,只显示以a开头的行

        ls -l | grep '^a'

(4)显示所有以d开头的文件中包含test的行

        $ grep 'test' d*

(5)显示在aa,bb,cc文件中匹配test的行

        $ grep 'test' aa bb cc

(6)显示所有包含每个字符串至少有5个连续小写字符的字符串的行

        $ grep ' [a-z] ' aa