linux 命令之grep

1  引言 

    Grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并 把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Grep 家族包括Grep、 eGrep 和fGrep。eGrep 和fGrep 的命令只跟Grep 有很小不同。 eGrep 是Grep 的扩展,支持更多的re 元字符, fGrep 就是 fixed  Grep 或fast  Grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux  使用GNU 版本的Grep。它功能更强,可以通过-G、-E、-F 命令行选项来使用eGrep 和fGrep 的功能。Grep 的工作方式是这样的,它在一个或多个文 中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。Grep 可用于shell 脚本,因为Grep 通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文 不存在,则返回2 。我们利用这些返回值就可进行一些自动化的文本处理工作。 

2  Grep 详解 

     功能说明:查找文件里符合条件的字符串。

语  法: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 在线帮助。

3 grep 实战


开始实战,我是直接在linux text模式启动,你可以自己找到一个测试目录,第一步执行命令:

[javascript] view plaincopyprint?

  1. vi 1.txt</span>  

上面这句命令的意思是:如果1.txt存在就打开,不存在就创建并打开

接着按一下键盘的s键,看见linux屏幕左下角提示“---插入---”,表明当前已经变成插入模式,接着,大家鼠标右键复制一下下面的这段文本,

在linux屏幕里点击鼠标右键,内容就粘帖进去了。

然后大家按一下键盘的“ESC”键,然后输入一个冒号”:“  屏幕里出现冒号之后,输入:wq,提示已写入。并已退出vi编辑模式。

[plain] view plaincopyprint?

  1. 安徽省 Anhuisheng   

  2. 澳门特别行政区 Aomen Tebie Xingzhengqu   

  3. 北京市 Beijingshi  

  4. 重庆市 Chongqingshi   

  5. 福建省 Fujiansheng   

  6. 甘肃省 Gansusheng   

  7. 广东省 Guangdongsheng  

  8. 广西壮族自治区 Guangxi Zhuangzu zizhiqu  

  9. 贵州省 Guizhousheng  

  10. 海南省 Hainansheng  

  11. 河北省 Hebeisheng  

  12. 黑龙江省 Heilongjiangsheng   

  13. 河南省 Henansheng   

  14. 湖北省 Hubeisheng   

  15. 湖南省 Hunansheng   

  16. 江苏省 Jiangsusheng   

  17. 江西省 Jiangxisheng   

  18. 吉林省 Jilinsheng   

  19. 辽宁省 Liaoningsheng   

  20. 内蒙古 Neimenggu zizhiqu   

  21. 宁夏回族自治区 Ningxia Huizu zizhiqu   

  22. 青海省 Qinghaisheng   

  23. 陕西省 Shaanxisheng   

  24. 山东省 Shandongsheng   

  25. 上海市 Shanghaishi   

  26. 山西省 Shanxisheng   

  27. 四川省 Sichuansheng   

  28. 台湾省 Taiwansheng   

  29. 天津市 Tianjinshi   

  30. 香港特别行政区 Xianggang Tebie Xingzhengqu   

  31. 新疆维吾尔族自治区 Xinjiang Weiwu’erzu zizhiqu  

  32. 西藏自治区 Xizang zizhiqu   

  33. 云南省 Yunnansheng  

  34. 浙江省 Zhejiangsheng</span>  

接着执行命令:

[javascript] view plaincopyprint?

  1. cp 1.txt 2.txt</span>  

复制一份1.txt命名为2.txt , 好了 ,练习开始。


p1:多文件查询

在1.txt和2.txt中查询出包含”区"的行:

[javascript] view plaincopyprint?

  1.   

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep '区' 1.txt  2.txt   

  2. 1.txt:澳门特别行政区 Aomen Tebie Xingzhengqu   

  3. 1.txt:广西壮族自治区 Guangxi Zhuangzu zizhiqu  

  4. 1.txt:宁夏回族自治区 Ningxia Huizu zizhiqu   

  5. 1.txt:香港特别行政区 Xianggang Tebie Xingzhengqu   

  6. 1.txt:新疆维吾尔族自治区 Xinjiang Weiwu’erzu zizhiqu  

  7. 1.txt:西藏自治区 Xizang zizhiqu   

  8. 2.txt:澳门特别行政区 Aomen Tebie Xingzhengqu   

  9. 2.txt:广西壮族自治区 Guangxi Zhuangzu zizhiqu  

  10. 2.txt:宁夏回族自治区 Ningxia Huizu zizhiqu   

  11. 2.txt:香港特别行政区 Xianggang Tebie Xingzhengqu   

  12. 2.txt:新疆维吾尔族自治区 Xinjiang Weiwu’erzu zizhiqu  

  13. 2.txt:西藏自治区 Xizang zizhiqu </span>  

或者查询出当前文件夹下的所有文件中包含“区” 的行:

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep '区' *  

  2. 1.txt:澳门特别行政区 Aomen Tebie Xingzhengqu   

  3. 1.txt:广西壮族自治区 Guangxi Zhuangzu zizhiqu  

  4. 1.txt:宁夏回族自治区 Ningxia Huizu zizhiqu   

  5. 1.txt:香港特别行政区 Xianggang Tebie Xingzhengqu   

  6. 1.txt:新疆维吾尔族自治区 Xinjiang Weiwu’erzu zizhiqu  

  7. 1.txt:西藏自治区 Xizang zizhiqu   

  8. 2.txt:澳门特别行政区 Aomen Tebie Xingzhengqu   

  9. 2.txt:广西壮族自治区 Guangxi Zhuangzu zizhiqu  

  10. 2.txt:宁夏回族自治区 Ningxia Huizu zizhiqu   

  11. 2.txt:香港特别行政区 Xianggang Tebie Xingzhengqu   

  12. 2.txt:新疆维吾尔族自治区 Xinjiang Weiwu’erzu zizhiqu  

  13. 2.txt:西藏自治区 Xizang zizhiqu </span>  



p2:行匹配

查询1.txt中包含“区"关键字的总行数,我们可以使用-c来显示行数。

[javascript] view plaincopyprint?

  1.   

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep -c '区' 1.txt  

  2. 6</span>  


p3:显示行号

我们可以使用-n开关啦控制是否显示行号,这个行号是在文件里的实际的行号。

[javascript] view plaincopyprint?

  1.   

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep -n '区' 1.txt  

  2. 2:澳门特别行政区 Aomen Tebie Xingzhengqu   

  3. 8:广西壮族自治区 Guangxi Zhuangzu zizhiqu  

  4. 21:宁夏回族自治区 Ningxia Huizu zizhiqu   

  5. 30:香港特别行政区 Xianggang Tebie Xingzhengqu   

  6. 31:新疆维吾尔族自治区 Xinjiang Weiwu’erzu zizhiqu  

  7. 32:西藏自治区 Xizang zizhiqu </span>  


[javascript] view plaincopyprint?

  1.   

p4:显示非匹配行,也就是结果取反我们可以使用 -v 来取反。

[javascript] view plaincopyprint?

  1.   

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep -v '区' 1.txt  

  2. 安徽省 Anhuisheng   

  3. 北京市 Beijingshi  

  4. 重庆市 Chongqingshi   

  5. 福建省 Fujiansheng   

  6. 甘肃省 Gansusheng   

  7. 广东省 Guangdongsheng  

  8. 贵州省 Guizhousheng  

  9. 海南省 Hainansheng  

  10. 河北省 Hebeisheng  

  11. 黑龙江省 Heilongjiangsheng   

  12. 河南省 Henansheng   

  13. 湖北省 Hubeisheng   

  14. 湖南省 Hunansheng   

  15. 江苏省 Jiangsusheng   

  16. 江西省 Jiangxisheng   

  17. 吉林省 Jilinsheng   

  18. 辽宁省 Liaoningsheng   

  19. 内蒙古 Neimenggu zizhiqu   

  20. 青海省 Qinghaisheng   

  21. 陕西省 Shaanxisheng   

  22. 山东省 Shandongsheng   

  23. 上海市 Shanghaishi   

  24. 山西省 Shanxisheng   

  25. 四川省 Sichuansheng   

  26. 台湾省 Taiwansheng   

  27. 天津市 Tianjinshi   

  28. 云南省 Yunnansheng  

  29. 浙江省 Zhejiangsheng</span>  


[javascript] view plaincopyprint?

  1.   

p5:精确匹配

我们可以使用\>符号来匹配以区结尾的字符串

[javascript] view plaincopyprint?

  1.   

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep '区\>' 1.txt  

  2. 澳门特别行政区 Aomen Tebie Xingzhengqu   

  3. 广西壮族自治区 Guangxi Zhuangzu zizhiqu  

  4. 宁夏回族自治区 Ningxia Huizu zizhiqu   

  5. 香港特别行政区 Xianggang Tebie Xingzhengqu   

  6. 新疆维吾尔族自治区 Xinjiang Weiwu’erzu zizhiqu  

  7. 西藏自治区 Xizang zizhiqu </span>  

我们可以使用\《符号来匹配以区开头的字符串,结果为空。

[javascript] view plaincopyprint?

  1.   

p6:大小写敏感

grep 默认是大小写敏感的,我们可以使用-i开关来控制,如果不加-i 结果为空:

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep -i 'beijing' 1.txt   

  2. 北京市 Beijingshi</span>  



 正则表达式


使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用正则表达式时最好用单引号括起来,这样可以防止g r e p 中使用的专有模式与一些s h e l l 命令的特殊方式相混淆。


p1:范围模式

如果想要查询‘山东’和‘山西’的列表,可以用[ ]来指定范围。

[javascript] view plaincopyprint?

  1.   

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep '山[东西]' 1.txt   

  2. 山东省 Shandongsheng   

  3. 山西省 Shanxisheng </span>  

[javascript] view plaincopyprint?

  1.   

p2:匹配行首

如果想要查询”山“开头的省份,

[javascript] view plaincopyprint?

  1. grep  '^山' 1.txt </span>  

结果同上。

如果想查询非”山“开头的省份,

[javascript] view plaincopyprint?

  1.   

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep  '^[^山]' 1.txt  

  2. 安徽省 Anhuisheng   

  3. 澳门特别行政区 Aomen Tebie Xingzhengqu   

  4. 北京市 Beijingshi  

  5. 重庆市 Chongqingshi   

  6. 福建省 Fujiansheng   

  7. 甘肃省 Gansusheng   

  8. 广东省 Guangdongsheng  

  9. 广西壮族自治区 Guangxi Zhuangzu zizhiqu  

  10. 贵州省 Guizhousheng  

  11. 海南省 Hainansheng  

  12. 河北省 Hebeisheng  

  13. 黑龙江省 Heilongjiangsheng   

  14. 河南省 Henansheng   

  15. 湖北省 Hubeisheng   

  16. 湖南省 Hunansheng   

  17. 江苏省 Jiangsusheng   

  18. 江西省 Jiangxisheng   

  19. 吉林省 Jilinsheng   

  20. 辽宁省 Liaoningsheng   

  21. 内蒙古 Neimenggu zizhiqu   

  22. 宁夏回族自治区 Ningxia Huizu zizhiqu   

  23. 青海省 Qinghaisheng   

  24. 陕西省 Shaanxisheng   

  25. 上海市 Shanghaishi   

  26. 四川省 Sichuansheng   

  27. 台湾省 Taiwansheng   

  28. 天津市 Tianjinshi   

  29. 香港特别行政区 Xianggang Tebie Xingzhengqu   

  30. 新疆维吾尔族自治区 Xinjiang Weiwu’erzu zizhiqu  

  31. 西藏自治区 Xizang zizhiqu   

  32. 云南省 Yunnansheng  

  33. 浙江省 Zhejiangsheng</span>  


[javascript] view plaincopyprint?

  1.   

这里可以在取反一次,这个只是娱乐

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$  grep -v  '^[^山]' 1.txt   

  2. 山东省 Shandongsheng   

  3. 山西省 Shanxisheng </span>  


p3:大小写设置

上面提到过了 可以用-i开关控制,也可以用[]包含大小写来实现:

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep 'bei' 1.txt   

  2. 河北省 Hebeisheng  

  3. 湖北省 Hubeisheng   

  4. [channel@localhost kingviker]$ grep -i 'bei' 1.txt   

  5. 北京市 Beijingshi  

  6. 河北省 Hebeisheng  

  7. 湖北省 Hubeisheng   

  8. [channel@localhost kingviker]$ grep  '[Bb]ei' 1.txt   

  9. 北京市 Beijingshi  

  10. 河北省 Hebeisheng  

  11. 湖北省 Hubeisheng </span>  


p4:匹配任意字符

我们还是查询以"山"开头的省份,

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep '山.省' 1.txt  //这里限制了必须是三个字,点”.”只代表一个字或一个字母。山东省 Shandongsheng   

  2. 山西省 Shanxisheng </span>  

我们如果想查询想查询,以“山,河,广'开头的省份,

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep '[山河广].省' 1.txt   

  2. 广东省 Guangdongsheng  

  3. 河北省 Hebeisheng  

  4. 河南省 Henansheng   

  5. 山东省 Shandongsheng   

  6. 山西省 Shanxisheng </span>  

p5:范围组合

我们想查询以大写字母A-L开头,中间可以出现0到6个小写字母,包含sh和Sh,并且以i或者eng结尾的结果:

[javascript] view plaincopyprint?

  1. <span style="font-family: 'Microsoft YaHei'; font-size: 18px; ">[channel@localhost kingviker]$ grep '[A-L][a-z]\{0,6\}[Ss]h[i,eng]$' 1.txt   

  2. 北京市 Beijingshi</span>  


p6:模式出现几率

上面的命令大家可能不懂”\{0,6\}“,现在就说明一下,这个是描述它前面的字母出现的次数,上例子中的意思就是a-z的字母可以连续出现0到6个。如果后边不写”\{1,\}"表示至少出现一次的,如果只写一个数字”\{2\}",表示最只匹配出现2次的结果:

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep 'a\{2\}' 1.txt   

  2. 陕西省 Shaanxisheng </span>  


p7:使用grep匹配“与”或者“或”模式,g r e p 命令加- E 参数,这一扩展允许使用扩展模式匹配。

这里想要查询 “北京,上海”:

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep -e '北京|上海' 1.txt   

  2. [channel@localhost kingviker]$ grep -E '北京|上' 1.txt   

  3. 北京市 Beijingshi  

  4. 上海市 Shanghaishi   

  5. [channel@localhost kingviker]$ </span>  

这个参数是大小写敏感的 我上一句命令-e 就没有结果


p8:空行 

结合使用^和$可查询空行。使用- c 参数显示总行数: 

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep -c '^$' 1.txt   

  2. 0</span>  


p9:匹配特殊字符
查询有特殊含义的字符,诸如$ . ' " * [] ^ | \ + ? ,必须在特定字符前加\。假设要查询包含 中文单引号’的 的所有行:

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep '\’' 1.txt   

  2. 新疆维吾尔族自治区 Xinjiang Weiwu’erzu zizhiqu</span>  


p10:查询IP 地址 
要查看n n n . n n n 网络地址,如果忘了第二部分中的其余部分,只知有两个句点,例如n n n . n n . . 。要抽取其中所有nnn.nnn IP 地址,使用[ 0 - 9 ] \ { 3 \ } \ . [ 0 - 0 \ { 3 \ } \。含义是任意数字出现3 次,后跟句点,接着是任意数字出现3 次,后跟句点。

[javascript] view plaincopyprint?

  1. grep '[0-9]\{3\}\.[0-9]\{3\}\.' filename</span>  


p11:使用通配符*的匹配模式

这个很简单了,但是有一点要说明,星号“*"前要加点'.':

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep ".*sheng" 1.txt   

  2. 安徽省 Anhuisheng   

  3. 福建省 Fujiansheng   

  4. 甘肃省 Gansusheng   

  5. 广东省 Guangdongsheng  

  6. 贵州省 Guizhousheng  

  7. 海南省 Hainansheng  

  8. 河北省 Hebeisheng  

  9. 黑龙江省 Heilongjiangsheng   

  10. 河南省 Henansheng   

  11. 湖北省 Hubeisheng   

  12. 湖南省 Hunansheng   

  13. 江苏省 Jiangsusheng   

  14. 江西省 Jiangxisheng   

  15. 吉林省 Jilinsheng   

  16. 辽宁省 Liaoningsheng   

  17. 青海省 Qinghaisheng   

  18. 陕西省 Shaanxisheng   

  19. 山东省 Shandongsheng   

  20. 山西省 Shanxisheng   

  21. 四川省 Sichuansheng   

  22. 台湾省 Taiwansheng   

  23. 云南省 Yunnansheng  

  24. 浙江省 Zhejiangsheng</span>  


p12:使用$限制字符串结尾

查询以eng结尾的数据:

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ grep 'eng$' 1.txt   

  2. 广东省 Guangdongsheng  

  3. 贵州省 Guizhousheng  

  4. 海南省 Hainansheng  

  5. 河北省 Hebeisheng  

  6. 云南省 Yunnansheng  

  7. 浙江省 Zhejiangsheng</span>  


p13:定向输出结果到指定文件

将查询出以eng结果的行并输出到3.txt

[javascript] view plaincopyprint?

  1. [channel@localhost kingviker]$ ls  

  2. 1.txt  2.txt  

  3. [channel@localhost kingviker]$ grep 'eng$' 1.txt > 3.txt  

  4. [channel@localhost kingviker]$ ls  

  5. 1.txt  2.txt  3.txt  

  6. [channel@localhost kingviker]$ cat 3.txt   

  7. 广东省 Guangdongsheng  

  8. 贵州省 Guizhousheng  

  9. 海南省 Hainansheng  

  10. 河北省 Hebeisheng  

  11. 云南省 Yunnansheng  

  12. 浙江省 Zhejiangsheng</span>  


p14:egrep

egrep 代表e x p r e s s i o n 或extended grep,适情况而定。e g r e p 接受所有的正则表达式, e g r e p 的一个显著特性是可以以一个文本作为保存的字符串,然后将之传给egrep 作为参数,为此使用- f 开关;egrep只是默认支持正则表达式扩展的,grep默认是不支持的 ,egrep要想支持正则表达式扩展需要加上-E




grep  --help  汉语翻译

grep --help
用法: grep [选项]... PATTERN [FILE]...
在每个 FILE 或是标准输入中查找 PATTERN。
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
例如: grep -i 'hello world' menu.h main.c


正则表达式选择与解释:
-E, --extended-regexp PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
-F, --fixed-strings PATTERN 是一组由断行符分隔的定长字符串。
-G, --basic-regexp PATTERN 是一个基本正则表达式(缩写为 BRE)
-P, --perl-regexp PATTERN 是一个 Perl 正则表达式
-e, --regexp=PATTERN 用 PATTERN 来进行匹配操作
-f, --file=FILE 从 FILE 中取得 PATTERN
-i, --ignore-case 忽略大小写
-w, --word-regexp 强制 PATTERN 仅完全匹配字词(匹配一行中的某个完整单词)同'\bword\b'
-x, --line-regexp 强制 PATTERN 仅完全匹配一行(与一整行完全匹配)
-z, --null-data 一个 0 字节的数据行,但不是空行


Miscellaneous:(多种运用)
-s, --no-messages suppress error messages  不显示错误信息
-v, --invert-match select non-matching lines  打印不匹配的行
-V, --version print version information and exit 打印grep版本并退出
--help display this help and exit    显示grep帮助并退出
--mmap ignored for backwards compatibility  忽视向以前版本兼容


Output control: (输出控制)
-m, --max-count=NUM stop after NUM matches  当匹配次数到达NUM后不再匹配
-b, --byte-offset print the byte offset with output lines  打印匹配行的字节偏移量和匹配行
-n, --line-number print line number with output lines    打印匹配行和行号 
--line-buffered flush output>-H, --with-filename print the filename for each match 打印出每一个匹配行的文件名和匹配行
-h, --no-filename suppress the prefixing filename>--label=LABEL print LABEL as filename for standard input   打印标签作为文件名的标准输入(主要用于管道处理)
例如:cat test |grep --label=test -H  123-o, --only-matching show>-q, --quiet, --silent suppress all normal output  抑制所有正常输出
--binary-files=TYPE assume that binary files are TYPE  TYPE is `binary', `text', or `without-match' ; 假定二进制文件为TYPE类型文件TYPE可以为binary、text或without-match
-a, --text equivalent to --binary-files=text 等价于-binary-files=text 
-I equivalent to --binary-files=without-match 等价于--binary-files=without-match
-d, --directories=ACTION how to handle directories  ACTION is `read', `recurse', or `skip';  当grep的对象为目录时用,处理目录可以读取、递归或跳过-D, --devices=ACTION how to handle devices, FIFOs and sockets  ACTION is `read' or `skip' ; 当grep的对象为处理设备、栈或套接字时必须用,处理对象可以读取或跳过-R, -r, --recursive equivalent to --directories=recurse 相当于--directories=recurse 遍历目录
--include=FILE_PATTERN search>--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN 跳过匹配的文件模式的文件和目录进行grep匹配
--exclude-from=FILE skip files matching any file pattern from FILE  跳过任一匹配文件模式的文件
--exclude-dir=PATTERN directories that match PATTERN will be skipped. 跳过匹配的目录文件目录
-L, --files-without-match print>-l, --files-with-matches print>-c, --count print>-T, --initial-tab make tabs line up (if needed) 将标签排队(标签即文件名)
-Z, --null print 0 byte after FILE name     打印文件名,文件名与匹配行中间没有空字节-z与-Z的区别之一:当一个文件有多个匹配行时-z只打印一次文件名,而-Z每匹配一次打印一次文件名
Context control:上下文控制
-B, --before-context=NUM print NUM lines of leading context 打印匹配行的前面的NUM行和匹配行
-A, --after-context=NUM print NUM lines of trailing context 打印匹配行的后面的NUM行和匹配行
-C, --context=NUM print NUM lines of output context      打印匹配行的前面和后面的NUM行和匹配行
-NUM same as --context=NUM   相当于--context=NUM
--color[=WHEN],--colour[=WHEN] use markers to highlight the matching strings;WHEN is `always', `never', or `auto' 高亮显示匹配的字符串,WHEN的值可设为always、never或auto
-U, --binary do not strip CR characters at EOL (MSDOS) 不剥离回车字符在文件结束符
-u, --unix-byte-offsets report offsets as if CRs were not there (MSDOS)   报告回车符不在的坐标(主要在DOS中)

‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。
直接使用‘egrep’或是‘fgrep’均已不可行了。
不带 FILE 参数,或是 FILE 为 -,将读取标准输入。如果少于两个 FILE 参数
就要默认使用 -h 参数。如果选中任意一行,那退出状态为 0,否则为 1;
如果有错误产生,且未指定 -q 参数,那退出状态为 2。



文献地址:http://www.07net01.com/linux/grep___helpdezhongwenwanzhengfanyihejiexi_36794_1354801369.html

转载于:https://my.oschina.net/f839903061/blog/296782

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值