grep--文本搜索工具
1 grep的基础使用
用于在指定的文件列表中查找指定的匹配样本。
如果指定文件中的内容包含符合所指定的样式,那么含有样式的那一行会显示出来;未找到则不显示任何内容。
1.1 grep命令的基本使用方式
grep[选项][匹配样本][文件列表]
如果不指定文件名列表,或使用的文件名为“-”,那么grep指令会从标准输入设备读取数据进行匹配。
在使用grep命令时,一定要提供一个文件的检索路径,否则grep命令会一直等待用户输入,直至程序中断
1.2 grep选项
选项名称 | 作用 |
---|---|
-c | 只输出匹配行的计数,不显示匹配的内容 |
-i | 不区分大小写(只适用于单个字符) |
-h | 查询多文件时不显示文件名 |
-n | 显示匹配行及行号 |
-s | 不显示不存在或无匹配文件的错误信息 |
-v | 显示不包含匹配的所有行 |
-E | 允许使用扩展模式匹配 |
其他的选项可以通过
man grep
进行查看。
在使用grep命令实现检索多个关键字时,其选项一般使用大写的字符E。
grep -E "hello|Hello" xxx.txt
2 grep和正则表达式
表达式可以使用单引号或者双引号括起来, 区别是单引号无法引用变量而双引号可以。
[]
匹配一个指定范围内的字符 ,[Gg]rep'匹配Grep和grep
为了在文本检索过程中,使正则表达式的匹配能够顺利进行,正则表达式需要使用引号括起来。
grep -E "#[h,H]e[l,L]*" xxx.sh grep -E "*[1-9][1-9].[A,Z]*" xxx.sh
^ $
脱字符^ 匹配行首
美元符号$ 匹配行尾
匹配空行的时,将脱字符和美元符号放在一起使用,从而使得行首和行尾之间没有其他的字符。
# 匹配空行 grep -c '^$' xxx.txt
可以应用于查找文件中空行的行数。
*
星号* 除了匹配多个文件之外,还可以用来匹配零个或者多个字符。
.
点号.匹配单个字符,这个字符可以是任意的字符。
{}
大括号{} 可用于限定某些字符出现的次数。只有该字符出现的次数匹配成功了,那么整个匹配才算成功。
# 匹配字符1至少出现2次 grep "1\{2\}" xx.txt # 匹配字符1出现1-2次 grep "1\{1,2\}" xx.txt
“{}”在正则表达式中属于特殊符号,因此需要使用转义字符“\”将符号"{}"转义成普通符号。
\
转义字符\ 在正则表达式中如果需要将特殊符号进行匹配,那么需要在特殊符号前面加上'\'进行转义,然后特殊字符就能像普通字符一样进行匹配了。
3 grep命令的拓展使用
类名的使用
使用grep命令的时候,除了使用正则表达式之外,还可以使用国际模式匹配的类名来代替正则表达式。
国际模式匹配的类名将正则表达式中的一些常用字符进行了“封装“,使用特定的字符进行表示,从而使用的更加方便。
常用的类名和正则表达式的关系如下表:
国际模式匹配的类名 | 对应的正则表达式 | 作用 |
---|---|---|
[[:upper:]] | [A-Z] | 匹配大写字符 |
[[:lower:]] | [a-z] | 匹配小写字符 |
[[:digit:]] | [0-9] | 匹配数字 |
[[:alnum:]] | [0-9a-zA-Z] | 匹配字符和数字 |
[[:space:]] | 空格或TAB | 匹配空格 |
[[:alpha:]] | [a-zA-Z] | 匹配字符,包括大小写字符 |
egrep
egrep = grep -E
egrep[选项][匹配模板][查找文件列表]
egrep使用方式于grep相似
egrep存在一些grep命令没有的选项,如下表
选项/符号 | 作用 | 实例 |
---|---|---|
加号+ | 匹配一个或多个字符 | 'a+[a-z]+[0-9]' |
(|) | 匹配字符串 | (root|unbntu) |
扩展表达式: + 匹配一个或者多个先前的字符, 至少一个先前字符. ? 匹配0个或者多个先前字符. a|b|c 匹配a或b或c () 字符组, 如: love(able|ers) 匹配loveable或lovers. (..)(..)\1\2 模板匹配. \1代表前面第一个模板, \2代第二个括弧里面的模板. x{m,n} =x{m,n} x的字符数量在m到n个之间.
fgrep
fgrep = grep -f
fgrep常用于为文件搜索字符串
一般将模式当作固定字符串来处理,因此其处理速度很快,但是其搜索功能与grep相比,相对较弱。
fgrep[选项][匹配模板][查找文件列表]
处理的结果,如果找到符合要求的数据,那么该命令就会返回0;如果未找到匹配的内容,其返回为1。如果返回值是大于1的数,那么该命令执行过程中会发生语法错误,或者是查找的目标文件不存在,需要对命令重新编写。
在使用fgrep命令时,还需要将每行输入数据限制在2048个字节。一个段落一般限制在5000个字符的长度,并且部分选项不能重叠使用,否则会引起标志位的覆盖。
fgrep "hao" *.txt
在fgrep命令中,匹配的模板都被看作是字符串,因此,所有的元字符都作为普通字符来处理。
4 grep命令使用实例
1 目录搜索--查找指定目录或文字
查找某些文件放在哪个目录中,或是在文件中存在哪些内容。
如果仅查找文件的位置,可以使用find命令。
# 在当前目录文件中朝朝文件xxx.txt ls -l | grep xxx.txt
2 使用ps命令检索特定的进程
ps -ef | grep squid