grep命令
GREP是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式并把行打印出来。GREP是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
1、grep命令基本用法
grep命令是支持正则表达式的一个多用途文本搜索工具,grep的一般格式为:
grep [选项] [模式] [文件...]
grep命令由选项、模式和文件三部分组成,它在一个或多个文件中搜索满足模式的文本行,模式后的所有字符串被看做文件名,文件名可以有多个,搜索的结果被打印到屏幕,不影响原文件的内容。Grep命令的选项用于对搜索过程进行补充说明。
grep命令选项及其意义:
-c #只输出匹配行的数量
-i #搜索时忽略大小写
-h #查询多文件时不显示文件名
-l #只列出符合匹配的文件名,而不列出具体的匹配行
-n #列出所有的匹配行,并显示行号
-s #不显示不存在或无匹配文本的错误信息
-v #显示不包含匹配文本的所有行
-w #匹配整词
-x #匹配整行
-r #递归搜索,不仅搜索当前工作目录,而且搜索子目录
-q #禁止输出任何结果,以退出状态表示搜索是否成功
-b #打印匹配行距文件头部的偏移量,以字节为单位
-o #与-b选项结合使用,打印匹配的词距文件头部的偏移量,以字节为单位
-E #支持扩展的正则表达式
-F #不支持正则表达式,按照字符串的字面意思进行匹配
grep命令的模式十分灵活,可以是字符串,也可以是变量,还可以是正则表达式。需要说明的是,无论模式是何种形式,只要模式中包含空格,就需要使用双引号将模式引起来,如果不加双引号,空格后的单词容易被误认为是文件名。大部分情况下,使用单引号将模式引起来也是可以的。
例:模式包含空格时,是否使用双引号的区别
WORDLIST文件的内容:
hello, caicai. world: watch, world caicaihello message
message world watch hello into the he shelast into.
last save hello caicai, world: message.
#搜索WORDLIST文件中包含watch字符串的行,不需要引号引起模式
执行:grep watch WORDLIST
结果:hello, caicai. world:watch, world caicai hello message
message world watch hello into the he she lastinto.
#搜索WORDLIST文件中包含hellocaicai字符串的行,不用引号将hello caicai引起来的结果
执行:grep hello caicaiWORDLIST
结果:grep: caicai: 没有那个文件或目录
#Shell将caicai解析为文件名,提示没有此文件的错误
#下面给出WORDLIST文件中包含hello字符串的行
WORDLIST:hello, caicai. world: watch, worldcaicai hello message
WORDLIST:message world watch hello into thehe she last into.
WORDLIST:last save hello caicai, world:message.
#搜索WORDLIST文件中包含hellocaicai字符串的行,用引号将hello caicai引起来的结果
执行:grep "hellocaicai" WORDLIST
结果:last save hellocaicai, world: message.
例:grep的多文件查询
FILE1文件的内容:
Shanghai Jiaotong University
University of Toronto
Beijing University
Southeast University
Victory University
FILE2文件的内容:
Shanghai
Toronto
Beijing
Nanjing
Melbourne
执行:grep Beijing FILE1FILE2
结果:FILE1:BeijingUniversity
FILE2:Beijing
例:用通配表示多文件
执行:grep Beijing FILE?
结果:FILE1:BeijingUniversity
FILE2:Beijing
1、-c选项
-c选项表示输出匹配字符串行的数量,默认情况下,grep命令打印出包含模式的所有行,一旦加上-c选项,就只显示包含模式行的数量。
例:grep -c的用法
执行:grep -c Beijing FILE?
结果:FILE1:1 #FILE1文件中有1行包含Beijing
FILE2:1
2、-n选项
-n选项列出所有的匹配行,并显示行号。默认情况下,grep搜索单个文件时,只显示每行的内容,搜索多个文件时,显示文件名及每行的内容,加上-n选项后,将在行内容前附加显示行号。
例:grep -n的用法
执行:grep -n Beijing FILE?
结果:FILE1:3:BeijingUniversity #FILE1文件的第3行
FILE2:3:Beijing
3、-v选项
-v选项显示不包含模式的所有行。
例:grep -v的用法
执行:grep -vc BeijingFILE? #同时使用-v和-c选项
结果:FILE1:4 #FILE1文件中有4行不包含Beijing字符串
FILE2:4
4、-i选项
默认情况下,grep命令对大小写是敏感的,如果加上-i选项就表示grep命令不区分大小写。
5、-h选项
-h选项表示查询多文件时不显示文件名,默认情况下,grep命令查询多个文件时,在匹配行之前显示文件名,加上-h选项后,grep命令将不再显示文件名。
例:grep -h的用法
执行:grep -h Beijing FILE?
结果:Beijing University #在匹配行前不再显示文件名了
Beijing
6、-l选项
-l选项表示只列出符合匹配的文件名,而不列出具体匹配行。
例:grep -l的用法
执行:grep -l Beijing FILE?
结果:FILE1 #只显示包含Beijing字符串的文件名
FILE2
7、-s选项
-s选项表示不显示不存在或无匹配文本的错误信息,默认情况下,grep在待搜索文件不存在或搜索不到符合模式的文本行时将打印错误信息。
例:grep -s的用法
执行:grep hello caicaiWORDLIST #未使用-s选项
结果:grep: caicai: 没有那个文件或目录 #打印了错误信息
WORDLIST:hello, caicai. world: watch, worldcaicai hello message
WORDLIST:message world watch hello into thehe she last into.
WORDLIST:last save hello caicai, world:message.
执行:grep -s hello caicaiWORDLIST #使用-s选项后,不打印错误信息
结果:WORDLIST:hello,caicai. world: watch, world caicai hello message
WORDLIST:message world watch hello into thehe she last into.
WORDLIST:last save hello caicai, world:message.