linux grep命令
1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2.格式
grep [options]
3.主要参数
[options]主要参数:
-c:(count)只输出匹配行的计数。
-i:(ignore)不区分大小写(只适用于单字符)。
-h:(hide)查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:(number)显示匹配行及行号。
-s:(show)不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
. :所有的单个字符。
* :有字符,长度可以为0。
4.grep命令使用简单实例
$ grep ‘test’ d*
显示所有以d开头的文件中包含 test的行。
$ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep ‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep ‘w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。
5.常用grep实例
(1)多个文件查询
grep "sort" *.doc #见文件名的匹配
(2)行匹配:输出匹配行的计数
grep -c "48" data.doc #输出文档中含有48字符的行数
(3)显示匹配行和行数
grep -n "48" data.doc #显示所有匹配48的行和行号
(4)显示非匹配的行
grep -vn "48" data.doc #输出所有不包含48的行
(4)显示非匹配的行
grep -vn "48" data.doc #输出所有不包含48的行
(5)大小写敏感
grep -i "ab" data.doc #输出所有含有ab或Ab的字符串的行
正则表达式的应用:
(1)正则表达式的应用 (注意:最好把正则表达式用单引号括起来)
grep '[239].' data.doc #输出所有含有以2,3或9开头的,并且是两个数字的行
(2)不匹配测试
grep '^[^48]' data.doc #不匹配行首是48的行
(3)使用扩展模式匹配
grep -E '219|216' data.doc
1.搜索特定的字符
(1)查看显示字符的行数
grep -n 'oo' pp
(2)查看非oo的字符
grep -v 'oo' pp
(3)查看大小写忽略的字符
grep -i 'oo' p
2.利用[]处理搜索结果
(4)查看 tast 和 test的字符串
grep -n 't[ae]st' pp #这里[ae]只当一个字符处理 a 或者是 e 这样就能匹配要求
(5)若是希望匹配 t(x)st 这个x是任意的字符
grep 't[.]st' pp #.符号代表任意的字符
(6)查看包含oo字符的信息
grep -n 'oo' pp
(7)若是希望在oo之前没有g的字符信息
grep -n '[^g]oo' pp #这里的^就是取反的意思 非goo得字符
(8)取前面非字符的字符
grep -n '[^a-zA-Z]oo' pp
(9)得到数字的字符的话
grep -n '[0-9]' pp
3.行首和行尾的特殊处理 $^
(10)若是希望取得第一行是 the 开头的字符行
grep -n '^the' pp
(11)若是希望取得以英文字符开头的字符
grep -n '^[a-zA-Z]' pp
(12)取得不是以英文字符开头的信息
grep -n '^[^a-zA-Z]' pp # 里面的^是取反 外面的^行开头
(13)取得小数点结尾的行
grep -n '\.$' pp #小数点是特殊字符 需要用\进行转义
(14)取得一个空行的方式
grep -n '^$' pp
(15)希望取得所有文档中非注释掉得内容的话
grep -v '^$' pp|grep -v ^# 第一个是取非空行的数据 第一个管道是取非#开头的数据
或者
grep -n '^#' pp
4.任意字符和重复字符
. :绝对的任意字符
* :0个或是多个相同字符
(16)要查看gf中间是两个字符的数据
grep -n 'g..f' pp
(17)至少有一个是o的字符串
grep -n 'oo*' pp #因为*代表0个或是多个
(18)以g开头和结尾,中间至少一个o
grep -n 'goo*g'
(19)查找gg中间是任意字符的字符串
grep -n 'g.*g' pp #这里.就代表任意字符
5.限定符 {}
(20)查看g和p之间存在两个连个o的字符串
grep -n 'go\{2,5\}p'
(21)查找至少两个的字符创
grep -n 'go\{2,\}p' pp
(22)查找只有两个的字符串
grep -n 'go\{2\}p' pp