Grep命令详解
grep [ -E | -F ] [ -i ] [ -h ] [ -s ] [ -v ] [ -w ] [ -x ] [ -y ] [ [ [ -b ] [ -n ] ] | [ -c | -l | -q ] ] [ -p [ Separator ] ] { [ -e PatternList ... ] [ -f PatternFile ... ] | PatternList ... } [ 文件... ]
描述
北京培训grep
命令用于搜索由Pattern参数指定的模式,并将每个匹配的行写入标准输出中。这些模式是具有限定的正则表达式,它们使用ed或egrep命令样式。grep命令使用压缩的不确定算法。
如果在File参数中指定了多个名称,grep命令将显示包含匹配行的文件的名称。对 shell 有特殊含义的字符 ($, *, [, |, ^, (, ), \ ) 出现在 Pattern
参数中时必须带双引号。如果 Pattern参数不是简单字符串,通常必须用单引号将整个模式括起来。在诸如 [a-z], 之类的表达式中,-(减号)cml 可根据当前正在整理的序列来指定一个范围。整理序列可以定义等价的类以供在字符范围中使用。如果未指定任何文件,grep会假
定为标准输入。
beech注意:
1.行被限制为2048个字节。
2.段落(使用-p标志时)长度当前被限制为5000个字符。
3.请不要对特殊文件运行grep命令,这样做可能产生不可预计的结果。
4.输入行不应包含空字符。
treo
5.输入文件应该以换行符作为结束。
6.正则表达式不会对换行符进行匹配。
7.虽然一些标志可以同时被指定,但其中的某些标志会覆盖其它标志。例如,-l选项将优先于所有其它标志。另外,如果您同时指定了-E
和-F标志,则后指定的那个会有优先权。
unproper标志
-b
在每行之前添加找到该行时所在的块编号。使用这个标志有助于通过上下文来找到磁盘块号码。-b标志不能用于来自标准输入和管道的输入。
-c
仅显示匹配行的计数。
-E
将每个指定模式视作扩展的正则表达式(ERE)。ERE 的空值将匹配所有的行。
注:带有 -E标志的grep命令等价于egrep 命令,只不过它们的错误和使用信息不同以及 -s标志的作用不同。
maven
-e PatternList
指定一个或多个搜索模式。其作用相当于一个简单模式,但在模式以 -(减号)开始的情况下,这将非常有用。模式之间应该用换行符分隔。连续使用两个换行符或者在引号后加上换行符 ("\n) 可以指定空模式。除非同时指定了-E或-F标志,否则每个模式都将被视作基本正则表达式(BRE)。grep可接受多个-e和-f标志。在匹配行时,所有指定的模式都将被使用,但评估的顺序没有指定。
-F
将每个指定的模式视作字符串而不是正则表达式。空字符串可匹配所有的行。
注: 带有-F标志的 grep命令等价于fgrep 命令,只不过它们的错误和使用信息不同以及-s标志具有不同的作用。
-f PatternFile
指定包含搜索模式的文件。模式之间应该用换行符加以分隔,空行将被认为是空模式。每种模式都将被视作基本的正则表达式(BRE),除非同时指定了-E或-F标志。
-h
禁止在匹配行后附加包含此行的文件的名称。当指定多个文件时,将禁止文件名。
-i
在进行比较时忽略字母的大小写。
-l
仅列出(一次)包含匹配行的文件的名称。文件名之间用换行符加以分隔。如果搜索到标准输入,将返回(标准输入)的路径名。-l标志同-c和-n标志的任意组合一起使用时,其作用类似于仅使用了-l标志。
-n
在每一行之前放置文件中相关的行号。每个文件的起始行号为 1,在处理每个文件时,行计数器都将被复位。
-p[ Separator]
显示包含匹配行的整个段落。段落之间将按照 Separator参数指定的段落分隔符加以分隔,这些分隔符是与搜索模式有着相同格式的模式。包含段落分隔符的行将仅用作分隔符,它们不会被包含在输出中。缺省的段落分隔符是空白行。
-q
禁止所有写入到标准输出的操作,不管是否为匹配行。如果选择了输入行,则以零状态退
出。-q
标志同-c和-l、-n标志的任意组合一起使用时,其作用类似于仅使用了-q标志。
-s
禁止通常因为文件不存在或不可读取而写入的错误信息。其它的错误信息并未被禁止。
-v
显示所有与指定模式不匹配的行。
-w
执行单词搜索。
-x
显示与指定模式精确匹配而不含其它字符的行。
-y
当进行比较时忽略字符的大小写。
PatternList
指定将在搜索中使用的一个或多个模式。这些模式将被视作如同是使用-e标志指定的。
File
hammer是什么意思指定将对其进行模式搜索的文件的名称。如果未给出 File变量,将使用标准输入。
退出状态
此命令返回下列出口值:
0
找到匹配项。
1
未找到匹配项。
>1
发现语法错误,或者文件不可访问(即使找到了匹配项)。
示例
1.若使用包含以下模式匹配字符的模式:*, ^, ?, [, ], \(, \), \{ 和 \}请输入:
grep "^[a-zA-Z]" pgm.s
这将显示 pgm.s 中第一个字符为字母的所有行。
2.若显示所有与模式不匹配的行,请输入:
grep -v "^#" pgm.s
这将显示 pgm.s 中首字母不是 #(井字符)的所有行。
3.若显示文件 file1 中与abc 或 xyz 字符串匹配的所有行,请输入:
grep -E "abc|xyz" file1
4.若在名为 test2 的文件中搜索 $(美元符号),请输入:
grep \\$ test2
为了强制shell 将\$(单反斜杠和美元符号)传递给grep命令,必须要使用 \\(双反斜杠)。\(单反斜杠)字符可通知grep命令将其后的字符(本例中为 $)视作原义字符而不是表达式字符。如果使用fgrep命令,则可以不必使用反斜杠之类的转义字符
在Unix中经常会用到grep去选取所需要的信息,用好grep有时可以到达意想不到的效果。
Grep : g (globally) arch for a re (regular expression ) and p (print ) the results.
1、参数:
-I :忽略大小写
-c :打印匹配的行数
-l :从多个文件中查找包含匹配项
-v :查找不包含匹配项的行
5ing-n:打印包含匹配项的行和行标
2、RE(正则表达式)
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配正则表达式的行开始
\>; 到匹配正则表达式的行结束
[ ] 单个字符;如[A] 即A符合要求
[ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
. 所有的单个字符
* 所有字符,长度可以为0
# f(显示我们所查文件的内容)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643
# grep -c "48" f(统计所有以“48”字符开头的行有多少)
# grep -i "May" f(不区分大小写查找“May”所有的行)
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643
# grep -n "48" f(显示行号;显示匹配字符“48”所在的行的行号)
1:48 Dec 3BC1997 LPSX 68.00 LVX2A 138
2:483 Sept 5AP1996 USP 65.00 LVX2C 189
5:484 nov 7PL1996 CAD 49.00 PLV2C 234
6:487 may 5PA1998 USP 37.00 KVM9D 644
# grep -ni "may" f(显示行号;显示匹配字符“may”所在的行的行号,不区分大小写)
# grep -v "48" f(显示输出没有字符“48”所有的行)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
471 May 7Zh1999 UDP 37.00 KV30D 643
# grep "471" f(显示输出字符“471”所在的行)
471 May 7Zh1999 UDP 37.00 KV30D 643
# grep "48>" f(精确显示输出字符“48”所在的行)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
# grep "48<tab>" f(显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行 slow life
注:tab键,安一下tab键即可;和精确显示输出的结果是相同的)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
# grep "48[34]" f(显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行)
483 Sept 5AP1996 USP 65.00 LVX2C 189
eachnet484 nov 7PL1996 CAD 49.00 PLV2C 234
# grep '48[34]' f(注意使用单引号(‘’)和使用双引号(“”)在Solaris8中输出的结果是一样的;
即:单引号、和双引号是通用的,只要你养成一种习惯就好)
483 Sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PL1996 CAD 49.00 PLV2C 234
# grep "^[^48]" f(显示输出行首不是字符“48”的行)
219 dec 2CC1999 CAD 23.00 PLV2C 68
# grep "[Mm]ay" f(设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行)
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643
# f(再次显示我们所使用的文件的内容)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
christopher lee483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643
# grep "K...D" f(显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
487 may 5PA1998 USP 37.00 KVM9D 644