介绍
grep用来检索(查找)给定文件中配置PATTERN的值,默认打印PATTERN匹配的行。另外,使用egrep和fgrep也是可以的。它们两个是grep的变体。同时的grep提供了选项可以替代egrep和fgrep。分别是 grep -E 等同于egrep。 grep -F
等同于fgrep。egrep和fgrep目前已经过时了,但是为了兼容历史程序egrep和fgrep目前还可以使用。
语法格式:
grep 'word' filenamegrep 'word' file1 file2 file3grep 'string1 string2' filenamecat otherfile | grep 'something'command | grep 'something'command option1 | grep 'data'
命令选项:
-V 打印版本信息指定解释器-E 使用扩展正则表达式, 相当于egrep命令-F 相当于fgrep命令-G使用基础正则表达式(默认)-P 使用Perl正则表达式搜索-i 忽略大小写匹配-r 递归搜索目录下所有文件,不包括链接文件, 相当于 -d recurse -R 递归搜索目录下所有文件,包括链接文件-v 翻转匹配,选中未匹配的行-n 打印行号-l仅打印匹配行的文件名-L 仅打印未匹配行的文件名-c 显示每个文件中匹配的行数-h 不显示文件名-w匹配整个单词,例如 grep 'hello' file.txt ,可以匹配 hellool、hello、 sayhellob等,如果使用grep -w 只会匹配hello单词。其他不会匹配。
案例:
再开始写案例之前,我们做好数据准备。假设我们有一个greptest.txt和其备份文件greptest.txt.bak,文件内容如下:
[root@dongjing grep]# lltotal 8-rw-r--r-- 1 root root 95 Sep 17 17:47 greptest.txt-rw-r--r-- 1 root root 95 Sep 17 18:00 greptest.txt.bak[root@dongjing grep]# cat greptest.txtTom,Scala,30Tom,Scala,30Tom,Java,30aJack,Python,95bJack,Python,95 XY,C,90Jack,PHP,66[root@dongjing grep]# cat greptest.txt.bakTom,Scala,30Tom,Scala,30Tom,Java,30aJack,Python,95bJack,Python,95 XY,C,90Jack,PHP,66
a. 找出greptest.txt中包含Java所有行,并显示行号(Java不区分大小写,)
[root@dongjing grep]# grep -in "Java" greptest.txt3:Tom,Java,30[root@dongjing grep]# grep -in Java greptest.txt3:Tom,Java,30[root@dongjing grep]# awk -F