一、grep

   grep-print lines matching a pattern(grep 可以分析一行信息,若当中有我们所需要的信息,就将该行拿出来)

   grep [OPTIONS]PATTERN [FILE...](pattern:文本字符和正则表达式的元字符组合而成的匹配条件)

   -A:后面可加数字,为after的意思,除了列出该行外,后续的n行也列出来

   -B:后面可加数字,为before的意思,除了列出该行外,前面的n行也列出来

   -C: 后面可加数字,除了列出该行外,前后的n行也列出来

   -E:interpret PATTERN as an extended regular expression(使用扩展正则表达式)

   -a:将binary文本以text文本的方式搜寻数据

   -c:计算找到‘pattern’的次数

   -i:忽略大小写的不同,所以大小写视为相同

   -n:输出所在行号

   -v:反向选择,亦即显示出没有‘pattern’内容的那一行

   -o:只显示被匹配到的字符串

   --color=auto(--color):将找到的关键词加上颜色进行显示

[root@www ~]# grep 'root' -n --color /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

11:operator:x:11:0:operator:/root:/sbin/nologin

二、正则表达式

正则表达式(regular expression,RE)

正则表达式就是用在字符串的处理上面的一项[表示式],正则表达式并不是一个工具程序,而是一个字符串处理的标准依据,如果你想要以正则表达式的方式处理字符串,就得要使用支持正则表达式的工具程序才行,这类的工具程序很多,例如vi,sed,awk,grep等。

正则表达式与通配符是完全不一样的,因为通配符(wildcard)代表的是bash操作接口的一个功能,而正则表达式则是一种字符串处理的表达方式。

正则表达式可分为标准正则表达式和扩展正则表达式

标准正则表达式:

[:space:]:代表会产生空白的字符,包括空格键、[tab]、CR等

[:digit:]:代表数字,即0-9

[:lower:]:代表英文小写字符,即a-z

[:upper:]:代表英文大写字符,即A-Z

[:alpha:]:代表英文大小写字符,即A-Z,a-z

[:alnum:]:代表英文大小写字符及数字,即0-9,A-Z,a-z

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

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

\<:锚定词首,此字符后面的任意内容必须出现在词首,因“<”的符号在shell有特殊意义,所以在“<”前面加 \

\>:锚定词尾,此字符前面的任意内容必须出现在词尾,因“>”的符号在shell有特殊意义,所以在“>”前面加 \

^:锚定行首,此字符后面的任意内容必须出现在行首

$:锚定行尾,此字符前面的任意内容必须出现在行尾

^$:空白行

.:匹配任意单个字符

*:重复前一个字符0到无穷多次

.*:任意长度的任意字符

\?:匹配其前面的字符1次或0次,因“?”的符号在shell有特殊意义,所以在“?”前面加反转字符“\”

\{m,n\}:匹配其前面的字符至少m次,至多n次,因“{}"的符号在shell有特殊意义,所以在“{}”前面加反转字符“\”

\(\):分组,匹配()内的内容,因“()”的符号在shell有特殊意义,所以在“()”前面加上 \

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

(下面都是例子)

[root@www ~]# grep -n 't[ae]st' regular_express.txt 

8:I can't finish the test.

9:Oh! The soup taste good.

[root@www ~]# grep -n '[^g]oo' regular_express.txt 

2:apple is my favorite food.

3:Football game is not use feet only.

18:google is the best tools for search keyword.

19:goooooogle yes!

[root@www ~]# grep -n '^the' regular_express.txt 

12:the symbol '*' is represented as start.

[root@www ~]# grep -n '\.$' regular_express.txt 

1:"Open Source" is a good mechanism to develop programs.

2:apple is my favorite food.

3:Football game is not use feet only.

4:this dress doesn't fit me.

10:motorcycle is cheap than car.

[root@www ~]# grep -n '^$' regular_express.txt 

22:

[root@www ~]# grep -n 'g..d' regular_express.txt 

1:"Open Source" is a good mechanism to develop programs.

9:Oh! The soup taste good.

16:The world <Happy> is the same with "glad".

[root@www ~]# grep -n 'ooo*' regular_express.txt 

1:"Open Source" is a good mechanism to develop programs.

2:apple is my favorite food.

3:Football game is not use feet only.

9:Oh! The soup taste good.

18:google is the best tools for search keyword.

19:goooooogle yes!

[root@www ~]# grep -n 'g.*g' regular_express.txt 

1:"Open Source" is a good mechanism to develop programs.

14:The gd software is a library for drafting programs.

18:google is the best tools for search keyword.

19:goooooogle yes!

20:go! go! Let's go.

[root@www ~]# grep -n 'goo\?g' regular_express.txt 

18:google is the best tools for search keyword.

[root@www ~]# grep -n 'go\{2,5\}g' regular_express.txt 

18:google is the best tools for search keyword.

扩展正则表达式:

+ :匹配其前面字符至少一个

{m,n}:匹配其前面的字符至少m次,至多n次,egrep不用在“{}”前加上 \

():分组,匹配()内的内容,egrep不用在“()”前加上 \

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

()+:匹配前面的分组至少一个

?:匹配其前面的字符1次或0次,egerp不用再“?”前加上 \

| :或(or)的意思

[root@www ~]# egrep -n 'good|dog' regular_express.txt 

1:"Open Source" is a good mechanism to develop programs.

9:Oh! The soup taste good.

17:I like dog.

其中 . [] [^] *  ^ $ \< \> 所代表的意义跟标准正则表达式一样