linux中使用grep命令详解
Linuxgrep命令
Linuxgrep命令用于查找文件里符合条件的字符串;也可以用于查找内容包含指定的范本样式的文件。它能使用正则表达式搜索,用于在文件中搜索指定的字符串模式,列出含有匹配模式子符串的文件名,并输出含有该字符串的文本行。
grep的工作方式是这样的:它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
基本语法:
grep[options]pattern[files]
[options]的主要参数:
-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:在显示符合样式的那一行之前,标示出该行的列数编号。
-o或--only-matching:只显示匹配PATTERN部分。
-q或--quiet或--silent:不显示任何信息。
-r或--recursive:此参数的效果和指定"-drecurse"参数相同。
-s或--no-messages:不显示错误信息。
-v或--revert-match:显示不包含匹配文本的所有行。
-V或--version:显示版本信息。
-w或--word-regexp:只显示全字符合的列。
-x--line-regexp:只显示全列符合的列。
-y:此参数的效果和指定"-i"参数相同。
-?:同时显示匹配行上下的?行,如:grep-2patternfilename同时显示匹配行的上下2行。
pattern正则表达式主要参数:
\:忽略正则表达式中特殊字符的原含义。
^:匹配正则表达式的开始行。
$:匹配正则表达式的结束行。
\<:从匹配正则表达式的行开始。
\>:到匹配正则表达式的行结束。
[]:单个字符,如[A]即A符合要求。
[-]:范围,如[A-Z],即A、B、C一直到Z都符合要求。
.:所有的单个字符。
*:有字符,长度可以为0。
代码示例:
示例1:在当前目录中,查找前缀有“test”字样的文件中包含“test”字符串的文件,并打印出该字符串的行,此时,可以使用如下命令:
greptesttest*
输出:
testfile1:ThisaLinuxtestfile!#列出testfile1文件中包含test字符的行 testfile_2:Thisisalinuxtestfile!#列出testfile_2文件中包含test字符的行 testfile_2:Linuxtest#列出testfile_2文件中包含test字符的行
示例2:反向查找,通过"-v"参数可以打印出不符合条件行的内容。查找文件名中包含test的文件中不包含test的行
grep-vtest*test*
输出:
testfile1:helLinux! testfile1:LinisafreeUnix-typeoperatingsystem. testfile1:Lin testfile_1:HELLOLINUX! testfile_1:LINUXISAFREEUNIX-TYPEOPTERATINGSYSTEM. testfile_1:THISISALINUXTESTFILE! testfile_2:HELLOLINUX! testfile_2:Linuxisafreeunix-typeopteratingsystem.