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