grep, egrep, fgrep
grep(GLOBAL RESEARCH)
是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。根据模式,搜索文本,并将符合模式的文本行显示出来。只能使用基本正则表达式 要使用扩展正则表达式需要-E
pattern: 由文本字符和正则表达式的元字符组合而成的匹配条件
语法:grep [option] pattern [FILE…]
1. Option:
-w:只显示全字符符合的列;
-i:忽略大小写;
--color:将匹配到的文本加以颜色显示;
-v:反向查找,即显示没有被匹配的行;
-o:只显示被模式匹配到的字符串;
-E:使用扩展正则表达式;
-A n:表示显示匹配到的字符其后n行;
-B n:表示显示匹配到的字符其前n行;
-C n:表示显示匹配到的字符其前后各n行;
2. Pattern
正则表达式:Regular Expression, REGEXP
正则表达式是对字符串操作的一种逻辑公式,即用事先定义好的一些特定字符及这些特定的字符组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
主要是对字符串(包括普通字符如a-z间的字母)和特殊字符(如元字符)进行操作的一种逻辑公式
- 元字符:
. :匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符;
[^]: 匹配指定范围外的任意单个字符;
- 字符集合:
[:digit:]:数字
[:lower:]:小写字母
[:upper:]:大写字母
[:punct:]:标点符号
[:space:]:空白字符
[:alpha:]:所有字母
[:alnum:] :所有数字
在使用这些字符集合是还需要用[ ]将其括起来即 [[:digit:]]
匹配次数(贪婪模式):
* :匹配其前面的字符任意次;a, b, ab, aab,acb,amnb; a*b可以匹配(b,ab,aab),其他的都不行;
.* :任意长度的任意字符
\?:匹配其前面的字符1次或0次,使用时一般需要加转义字符\(有部分匹配就行,并不一定要求整行都匹配);
{m.n}:匹配其前面的字符至少m次,至多n次; {1,} ; {0,3} ,没有上限可将n省略(花括号在linux中表示展开,用\对其进行转义)位置锚定:
^:锚定**行首**,此字符后面的任意内容必须出现在行首; $:锚定**行尾**,次字符前面的任意内容必须出现在行尾; ^$:空白行
\<或\b:其后面的任意字符必须作为单词首部出现,锚定词首 \
扩展正则表达式egrep:
字符匹配:
./[ ]/[^]与基本正则表达式一致次数匹配:
*:相同,匹配前面的字符任意次
?:其前字符0次或1次,不用加\
+:匹配其前面的字符至少1次
{m, n}:不需要使用\
位置锚定字符都一样:
^ /$/ \
():分组,不需要加\
\1, \2, \3, .....
|:或者 a|b 表示a或者b, C|cat表示C或cat而不是Cat或cat,分组可实现Cat或cat grep -E --color '(C|c)at' file
+:匹配其前面的字符至少1次
\.:表示对元字符进行转义,为其本身含义