grep命令详解

Table of Contents

grep三大家族:grep egrep fgrep

一、基本用法

grep [options] PATTERN [FILE...]

    -i ignore case

    --color

    -v reverse

    -o only print match string

    -c  计算找到行的数目

    -w  只匹配单词

    -q  安静模式,不输出任何信息,即使是检测到错误,而是立即返回状态0(如果匹配到的话)

TIP: alias grep='grep --color'

 

二、正则表达式

RegExp:  regular expression 正则表达式

    ^ 表示一行的开头。如:/^#/ 以#开头的匹配。

    $ 表示一行的结尾。如:/}$/ 以}结尾的匹配。

    \< 表示词首。 如 \<abc 表示以 abc 为首的詞。

    \> 表示词尾。 如 abc\> 表示以 abc 結尾的詞。

    . 表示任何单个字符。

    * 表示某个字符出现了0次或多次。

    [ ] 字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示反,如[^a]表示非a的字符

 

1  元字符:metacharacter:

    .  匹配任意单个字符

    [] 匹配指定范围的任意单个字符

    [^] 匹配指定范围外的任意单个字符

            字符集合  :  [:digit:]  [:lower:]  [:upper:]  [:punct:]  [:space:]  [:alpha:]  [:alnum:]

            注:引用时要用[]

 

2  匹配次数(贪婪模式):

    *  匹配其前面的字符任意次

    \?  匹配前面字符一次或零次

    \{m,n\} 匹配前面字符至少m次,至多n次

 

3  位置锚定

^  锚定行首

$  锚定行尾

^$ 锚定空行

\< 或 \b 其后面的任意字符必须作为单词首部出现

\> 或 \b 其后面的任意字符必须作为单词尾部出现

 

4  分组

\(\)

    \(ab\)*  ab出现零次或多次

    后向引用

    \1  引用第一个左括号以及与之对应的右括号所包括的所有内容

    \2  。。。。。

    \3  。。。。。

 

5  上下文控制  Context control:

  -B, --before-context=NUM  print NUM lines of leading context

  -A, --after-context=NUM   print NUM lines of trailing context

  -C, --context=NUM         print NUM lines of output context

 

-------------------------------------------------------------------------------------------------------------

 

实例1  输出下列文本包含linux行的前后2行

8888

99999

linux

UI

nouu

 

answer:  grep -A2 -B2 'linux'filename 或 grep -C 'linux'filename