1.grep:Global RE Printing
Regular Expression
文本过滤工具,能够实现根据指定的模式(pattern)逐行搜
模式:是由正则表达式的元字符,其他字符组成的匹配条件;
RE:正则表达式
Base RE
Extended RE
grep [option]...'pattern' FILE...
-v 反向取值;
--color=auto 匹配的字符加红色加粗体显示;
1.基本正则表达式元字符
.:匹配任意单个字符;
如,grep 'c.u' /proc/cpuinfo;
..:匹配2个字符;
[]:表示指定范围内的任意单个字符;
如,grep --color=auto 'c..[a-z]' /proc/cpuinfo;
[^]:指定范围外的任意字符;
2.次数匹配(贪婪匹配)
*:匹配其前的字符的0,1或多次;
如,ab*c: abc,abbc,ac(不匹配),abdc(表示b的出现
次数的);
作业(grep.txt文件中查找,其中一行有tab键编写):
查找ab,a b,accccb;
grep 'a[[:space:]]*b' /tmp/grep.txt;
?:匹配其前的字符的0或1次;
\{m,n\}:其中\是转意,{}是避免shell展开,至少m
次至多n次;
\{0,n\}:至多n次;
\{m\}:m次;
作业:
练习以下匹配:
a[a-z]\{0,2\}c:abc,aaaac,accccc;
3.锚定符
r..t:root,chroot,rooter;
This is root.
There is chroot.
单词锚定:
\<:锚定词首;如,\<r..t;
\>:锚定词尾;如,root\>;
行首锚定:
^(脱字符):如,^root;
行尾锚定:
$:如,root$;
a.如何显示行尾是root且可以带一个标点的行;
grep 'root[[:punct:]]?$' FILE=grep 'root[[:punct:]]\{0,1\}$' FILE;
b.如何显示行首是空白以root开头的行;
grep '^[[:space:]]*root' FILE;
.*:匹配任意长度的任意字符;
如,a.*b,a和b之间出现任意长度的任意字符;
4.分组
xabababy,ab成组出现;
\(\),x\(ab\)*y
前向引用:
He love his lover.
She like her liker.
He love his liker.
She like her lover.
l..e.*l..er;
\(l..e\).*\1r(后面是数字1);