语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...] 补充说明:grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。 参 数: -a或--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”参数相同。 --help 在线帮助。 示 例: grep match_pattern filename或者grep "match_pattern" filename this is the line containing match_pattern #命令会返回包含给定match_pattern的文本行 [root@server1 test]# echo -e "this is a word\nnext line" | grep word --color=auto this is a word grep命令通常将match_pattern视为通配符。如果要使用正则表达式,需要添加-E(extended)使用扩展正则表达式,也可以使用默认允许正则表达式的grep命令---egrep [root@server1 test]# echo -e "www.linuxeye.com 43243\n4444" | grep -E "[a-z]+" www.linuxeye.com 43243 [root@server1 test]# echo -e "www.linuxeye.com 43243\n4444" | egrep "[a-z]+" www.linuxeye.com 43243 #选项-o只输出文本中匹配到的文本部分 [root@server1 test]# echo -e "www.linuxeye.com 43243\n4444" | egrep -o "[a-z]+" www linuxeye com #选项-v(invert)将匹配结果进行反转 [root@server1 test]# echo -e "www.linuxeye.com 43243\n4444" | egrep -v "[a-z]+" 4444 #-c统计匹配行的数量,并不是匹配的次数 [root@server1 test]# echo -e "www.linuxeye.com 43243\n4444\n3333" | egrep -vc "[a-z]+" 2 #-n打印出包含匹配字符串的行号 [root@server1 test]# echo -e "www.linuxeye.com 43243\n4444\n3333" | egrep -vn "[a-z]+" 2:4444 3:3333 #-b打印样式匹配所位于的字符或字节偏移,一行中字符串的字符偏移是从该行的第一个字符开始计算,起始值是0 [root@server1 test]# echo -e "www.linuxeye.com 43243\n4444\n3333" | egrep -vb "[a-z]+" 23:4444 28:3333 #-l搜索多个文件并找出匹配文本位于哪一个文件中 -l相反选项-L,它会返回一个不匹配的文件列表 [root@server1 test]# grep -l line2 * version1.txt version2.txt version.patch [root@server1 test]# grep -L line2 * filestat.sh other out.html remove_duplicates.sh test test_copy1 test_copy2 #-R递归搜索文件 [root@server1 test]# grep -Rn "text" . #-i忽略样式中的大小写 [root@server1 test]# echo www.LINUXEYE.COM | grep -i linuxeye www.LINUXEYE.COM #-e匹配多个样式中的一个 [root@server1 test]# echo www.LINUXEYE.COM | grep -ie linx -e com www.LINUXEYE.COM #-f与-e选项以后,-f在样式文件中逐行写下匹配的样式 [root@server1 test]# cat pat_file hello cool [root@server1 test]# echo "hello this is cool" | grep -f pat_file hello this is cool #在grep搜索中包含或排除文件 只在目录中递归搜索所有的.c和.cpp文件 [root@server1 test]# grep "main()" /usr -r --include *.{c,cpp} /usr/src/kernels/2.6.18-194.el5PAE-i686/scripts/kconfig/gconf.c: gtk_main(); ... 在搜索中排除所有的README文件 [root@server1 test]# grep "main()" . -r --exclude "README" 如果需要排除目录,可以使用--exclude-dir选项 如果需要从文件中读取所需排除的文件列表,使用--exclude-from FILE 使用0值字节后缀的grep与xargs [root@server1 test]# echo test > file1 [root@server1 test]# echo cool > file2 [root@server1 test]# echo test > file3 [root@server1 test]# grep "test" file* -lZ | xargs -0 rm grep的静默输出 -q(quiet mode) [root@server1 test]# cat file2 cool [root@server1 test]# grep -q 'co' file2 ;echo $? 0 [root@server1 test]# grep -q 'cookk' file2 ;echo $? 1 打印出匹配文本的之前行或之后行 [root@server1 test]# seq 10 | grep 5 -A 3 5 6 7 8 [root@server1 test]# seq 10 | grep 5 -B 3 2 3 4 5 [root@server1 test]# seq 10 | grep 5 -C 2 3 4 5 6 7 转载请保留固定链接: https://linuxeye.com/command/grep.html |