一、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.
其中 . [] [^] * ^ $ \< \> 所代表的意义跟标准正则表达式一样