grep

grep是Global search regular expression(RE) and Print out the line的缩写,全面搜索匹配正则表达式的内容并输出。

grep家族包括了grep、egrep和fgrep三个命令。其中egrep和fgrep的命令只跟grep有很小的不同。egrep(Extended grep)是grep的扩展,支持更多的正则元字符,而 fgrep(Fixed grep或Fast grep)则把所有的字母都看作单词。

grep [OPTIONS] PATTERN [FILE…]
常用参数
-i 忽略大小写
–color 匹配到的文字高亮显示
-v 显示没有被匹配的行
-o 只显示被匹配到的字符串

正则表达式

默认情况下,grep所使用的正则表达式pattern为BRE(Basic Regular Expression)。因此,只在ERE中定义的元字符需要使用反斜线(\)转义后才能使用,否则会被当做普通的字符来识别。或者直接使用egrep和grep -E来直接使用ERE。

  • {} 重复次数
  • () 分组
    • 重复一次或多次
  • ? 重复零次或多次

另外,与很多变成语言常用的perl字符集不同,Linux下的正则表达式支持POSIX字符集。因为字符集需要放在方括号里才会被识别,因此在使用时需要在外侧再加一层方括号。

POSIX 类描述
[:alnum:]字母和数字
[:alpha:]字母
[:lower:]小写字母
 [:upper:] 大写字母
 [:blank:] 空白字符(空格和制表符)
 [:space:] 所有空格符(空白字符、换行、回车)
 [:cntrl:] 不可打印的控制字符(退格、删除、警铃)
 [:digit:] 十进制数字
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:punct:] 标点符号