摘要:grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep 命令用于查找文件里符合条件的字符串,它能使用正则表达式搜索文本,并把匹配的行打印出来。作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,就像在windows中打开txt文件,然后使用快捷键 “Ctrl+F” 在文本中查找某个字符串一样,就是说可以把grep理解成字符查找工具。
一、命令格式:grep [option] pattern file
常用参数
-a --text
不要忽略二进制的数据。 将 binary 文件以 text 文件的方式搜寻数据
-A --after-context=<显示行数>
除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b --byte-offset
在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B --before-context=<显示行数>
除了显示符合样式的那一行之外,并显示该行之前的内容。
-c --count
计算符合样式的行数。
-C --context=<显示行数>或-<显示行数>
除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d --directories=<动作>
当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e --regexp=<范本样式>
指定字符串做为查找文件内容的样式。
-E --extended-regexp
将样式为延伸的普通表示法来使用。
-f --file=<规则文件>
指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F --fixed-regexp
将样式视为固定字符串的列表。
-G --basic-regexp
将样式视为普通的表示法来使用。
-h --no-filename
在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H --with-filename
在显示符合样式的那一行之前,表示该行所属的文件名称。
-i --ignore-case
忽略字符大小写的差别。
-l --file-with-matches
列出文件内容符合指定的样式的文件名称。
-L --files-without-match
列出文件内容不符合指定的样式的文件名称。
-n --line-number
在显示符合样式的那一行之前,标示出该行的列数编号。
-q --quiet或--silent
不显示任何信息。
-r --recursive
此参数的效果和指定“-d recurse”参数相同。
-s --no-messages
不显示错误信息。
-v --revert-match
显示不包含匹配文本的所有行。
-V --version
显示版本信息。
-w --word-regexp
只显示全字符合的列。
-x --line-regexp
只显示全列符合的列。
-y
此参数的效果和指定“-i”参数相同。
--color=auto
可以将找到的关键词部分加上颜色的显示
二、使用例子
说明:grep 搜索字符串的命令格式:grep string filename
寻找字串的方法很多,比如想找所有以P开头的行。
^P 以P开头的行,^表示开始的意思
P$ 以P结尾的行,$表示结束的意思
^[0-9] 以数字开始的行,[]内可列举字母
^[124ab] 以1,2,4,a,或b开头的行
* 星号表示0个以上的字母(可以没有)
+ 加号表示1个以上的字母
.\ 斜线可以去掉特殊意义
<eg> grep \'^.\' myfile.txt 列出所有以句点开头的行。
1、查找指定进程
执行指令# ps -ef|grep java。如下图
2、查找指定进程个数
执行指令# ps -ef|grep -c java。如下图
3、将多个文件之间相同的行输出来
首先执行指令# cd /etc/sysconfig/network-scripts/
然后执行指令# grep "IPADDR" ifcfg-ens192 ifcfg-lo。如下图
4、输出被模式匹配到行
执行指令# grep "root" /etc/passwd。如下图
5、只输出被模式匹配到的字符串,而不是整个行
执行指令# grep -o "root" /etc/passwd。如下图
6、从文件中查找关键词,默认情况区分大小写
执行指令# grep 'User' /etc/passwd。如下图
7、从文件中查找关键词,忽略大小写,默认情况区分大小写
执行指令# grep -i 'user' /etc/passwd。如下图
8、统计文件的行数
执行指令# grep -c "^.*$" /etc/passwd。如下图
等同于指令# wc –l。如下图
9、匹配正则表达式的开始行
执行指令# grep '^root' /etc/group。如下图
10、匹配正则表达式的结束行
执行指令# grep 'user$' /etc/group。如下图
11、使用扩展模式匹配
执行指令# netstat -an|grep -E "ESTABLISHED|WAIT|LISTEN"。如下
备注:加上-E 多条件用""包起来,然后多条件之间用|管道符分开。