grep :Global search Regular Exmpression and Print,默认只支持基本正则表达式
egrep:Extended grep,支持扩展正则表达式。
fgrep :fast grep,不支持正则表达式元字符,但是搜索速度最快。
查看正则表达式的帮助信息:
#whatis regex
#man 7 regex
#man grep
#man egrep
基础正则表达式:
默认工作在贪婪模式下,即尽可能长的去匹配符合模式的内容。
^ :锚定行首的符合条件的内容,用法格式" ^pattern ”;
$ :锚定行尾的符合条件的内容,用法格式" pattern$ ";
" ^pattern$ " :锚定只含有pattern的行;
" ^$ " :锚定空白行;
. :匹配任意单个字符;
* :匹配紧挨其前面的字符任意次,前面字符只是用来做匹配的,可以不存在;
a*b: ab、aab、acb、 b
“ .* " :匹配任意长度的任意字符;
[ ] :匹配指定范围内的任意单个字符。比如[0-9],表示0-9范围内任选一个;
[^ ]:匹配指定范围外的任意单个字符。比如【^0-9],表示 除0-9 之外 的任意字符;
字符集合:
[:digit:] :表示所有数字,相当于0-9,想要选一个使用[[:digit:]]
[:lower:] :表示所有小写字母
[:upper:] :表示所有大写字母
[:alpha:] :表示所有字母
[:alnum:] :表示相当于[0-9a-zA-Z]
[:space:] :表示空白字符
[:punct:] :表示所有标点符号
\? :匹配紧挨在其前面的字符0次或1次,而前面字符只是用来做匹配的,可以不存在;
a\?b : ab、aab、 acb、 b
\< :锚定词首,用法:\<pattern
\b :\bpattern。与” \< “相比较," \< "更能直观的代表是锚定词首,且在vim中不支持” \b “;
\> :锚定词尾,用法:pattern\>
\b :pattern\b
\<pattern\>:锚定单词
\{m,n\}:匹配前面的字符至少m次,至多n次;
\{0,n\}:至多n次;
\{m,\} :至少m次;
\{m\} :精确匹配m次;
a\{1,3\}b:b,ab,aab,aaab, aaaaaab,acb
grep "[bB].\{2,5\}[tT]": Boot,B123T,bxy12T
\(\) :分组,用法格式:\(pattern\)
应用分组时,按照分组从左到右的顺序依次使用\1,\2,\3 ...
\(ab\)\{1,3\}:ab,aab,abb,abab,ababab
#cat > /root/test.txt << EOF
He like his liker.
He love his liker
She love her lover
She like her lover
EOF
要求:将每句的最后面一个单词改为和第二个单词一样并加上” r “
#grep \(l..e\).*\1r /root/rest.txt
grep的常用选项:
-v :反向选取,只显示不符合模式的行;
-o :只显示被模式匹配到的字符串,而不是整个行;
-i :匹配时不区分字母大小写;
-w :只显示单个单词的匹配,类似于单词锚定\<word\>;
-r :递归搜索某个目录下的子目录及其所有文件,并进行匹配。
-C # :显示匹配到的行前后 # 行(C表示context,上下文);
-E # :使用扩展的正则表达式,相当于egrep
--color=auto:将被选中的部分突出显示。
扩展正则表达式:
基本正则表达式中的部分元字符意义和形式不变:
. 、*、[ ] 、[^ ]、\<、\>、^ 、$
部分元字符形式发生变化:
{m,n} :去掉了2个"\",还是表示至少m次,至多n次。
( ) :去掉了2个"\",还是表示分组
? :去掉了1个”\“,还是表示0个或1个。
新增的元字符:
+ :表示匹配前面的字符至少1次,相当于{1,}
a|b :表示二选一,C|cat表示C或者cat,(C|c)at表示cat或者Cat。
实际应用:
扩展正则表达式匹配IP地址
IP地址的范围是1.0.0.1~223.255.255.254
# ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>
(\.\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-9]{2})\>){2}
(\.\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>)"