grep:文本过滤工具

    grep  egrep  fgrep

sed  : stream editor  文本编辑工具

awk :  Linux上的实现gamk  文本报告生成器

 

其中 

grep   Global search  Regular expression  and Print out the Line

全局搜索正则表达式并且打印出来

文本搜索工具

egrep  支持正则表达式

fgrep  不支持正则

 

例子

grep --color=auto  root  /etc/passwd  显示root的颜色

fgrep  root  /etc/passwd  速度快很多   (fastgrep)

grep -v root /etc/passwd  显示无法被pattern(root)匹配到的行

 -i  忽略字符大小写

-o  仅显示匹配到的字符串本身  一般用于统计个数

-q  不显示任何信息  静默模式 只用结果 可以用于重定向  没必要让他显示出来

用   echo  $?   显示0表示成功

-A  2  root /etc/passwd  显示匹配行并且额外显示匹配行之后的两行

-B 2 root /etc/passwd  显示匹配行并且额外显示匹配行之前的两行

-C 2 root /etc/passwd  显示匹配行并且额外显示匹配行中前后各两行都显示出来

-E  支持使用拓展的正则表达式

 

基本正则表达式元字符;

   字符匹配

      .   匹配任意单个字符

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

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

 

grep  's..n'  /etc/passwd   会出现sbin

grep '...t'    ...   任意三个字符

 

   匹配次数

      *  表示匹配前面的字符任意次   

例如  x*y     比如  abxy   axxy  acxoy  表示y前面可以出现任意个x 

也可以中间不出现x  因为*表示可以没有  只有x是不行的  需要y

   贪婪模式     有多少匹配多少 

   .*  表示任意长度的任意字符  (*任意长度  .任意字符)

 \?  问号表示其前面的字符0次或1次   也就是前面字符可有可无

\+   匹配前面字符至少一次    'x\+y'   y前面至少一次出现x

\{m\}   匹配前面的字符m次

匹配一个字符三次   [[:alpha:]]\{3\}t      表示t前面的字符必须出现三次

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

   位置锚(mao三声da)定

 ^ 行首锚定

 ^root  出现在模式最左侧

$  行位锚定

^pattern$ 用于模式匹配整行

^$空行(不包含空格)

^[[:space:]]*$  任意有空格的地方都算  

\< 或者  \b 词首锚定  必须出现在左侧

\> 或者 \b  词尾锚定  出现在单词模式的右侧

\<pattern\>  匹配整个单词 

分组符号

\(\)

  \(xy\)*ab  ab前面出现任意xy在一起的字串

例如 xy至少出现一次  '\(xy\)\+'  

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中

这些变量的命名方式  \1  或者\2 。。。  

\1  从左侧起  第一个括号及其与之匹配右括号之间的模式所匹配到的字符

\(ab\+\(xy\)*\)

左面 \(  匹配到最后面  \)

\1  :  ab\+\(xy\)   第一个括号里面的模式

\2  :  xy   表示第二个括号的模式

 

例子: