#grep命令

##介绍
grep包括grep、egrep和fgrep, egrep和fgrep与grep基本是一样的程序,通过调用不同的参数,grep可以实现大多数grep家族具有的功能,在linux中使用GNU版本的grep,可以通过-E、-F命令行选项来使用egrep和fgrep的功能

$ grep test a.txt
会返回a.txt中包含test的文本行,不会返回Test之类的行,大小写敏感的

$ grep -i test a.txt
会返回所有匹配Test、tEst等混合大小写的拼写

##grep与正则表达式

grep的正则表达式元字符基本集包括 ^、$、*、[]、[^]、\>和\<

^ 行首定位符
$ 行尾定位符
. 匹配任意一个字符
* 匹配0个或多个前导字符
[] 表示匹配指定范围内的其中一个字符
[^] 匹配不在指定范围内的字符
\< 词首定位符
\> 词尾定位符  例如'grep\>'匹配包含以grep结尾的单词的行
x\{m\}   重复x字符m次  例如'o\{5\}'
x\{m,\}  重复x字符至少m次
x\{m,n\} 重复x字符,至少m次,不多于n次

##grep常用参数

  • -# 同时显示匹配行上下#行,#表示数字
  • -b 在每行前打印字符偏移量
  • -c 只打印匹配的行数,不显示匹配的内容
  • -f 从文件中提取模板
  • -h 当搜索多个文件时,不显示匹配文件名前缀
  • -i 忽略大小写
  • -q 取消显示,只返回退出的状态
  • -l 打印匹配模板的文件清单
  • -L 打印不匹配模板的文件清单
  • -n 在匹配的行前面打印行号
  • -s 不显示关于不存在或者无法读取文件的错误信息
  • -v 反搜索,只显示不匹配的行
  • -w 如果被\<\>引用,就把表达式作为一个单词搜索
  • -V 显示软件版本

##egrep和fgrep
egrep表示扩展grep(extends grep),执行效率比grep高,但需占用较大的内存空间,用于搜素更复杂的正则表达式,另外一个fgrep,占用空间比egrep小,且速度比grep快,但只能处理简单的字符串,不能处理正则表达式

grep '[)]\;' test  通过通配符包含);的匹配test文件
grep -E '[)]\;' test  -E通过通配符包含);的匹配test文件
egrep '[)]\;' test   egrep直接就默认以通配符模式去匹配搜索
如果没有反斜杠标识是正则表达式,grep不加-E去搜索是不会按照正则表达式方式去识别,而egrep默认就会识别,grep -E才会默认识别。

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

shell复习6-gawk与sed 上一篇
shell复习4-shell正则表达式 下一篇