LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > Linux命令 >

Linux grep命令参数及使用方法详解

时间:2012-10-15 17:11来源:www.linuxeye.com 编辑:LinuxEye 点击:
功能说明: 查找文件里符合条件的字符串。 语 法: grep[-abcEFGhHilLnqrsvVwxy][-A显示列数][-B显示列数][-C显示列数][-d进行动作][-e范本样式][-f范本文件][--help][范本样式][文件或目录...] 补充
功能说明:查找文件里符合条件的字符串。

语  法: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

转载请保留固定链接: http://www.linuxeye.com/command/grep.html

------分隔线----------------------------
标签:grep
栏目列表
推荐内容