正则表达式(RegularEXPression),简单的来说,就是用一些符合某种语法规则的字符串来实现其检索的功能。我们这里以grep为例,来学习正则表达式:
grep:使用基本正则表达式定义的模式来过滤文本的命令;
grep的用法:
grep[options]PATTERN[FILE...]
options:
-i:忽略字符大小写
--color:匹配的字符显示颜色例:aliasgrep=grep--color)
-v:显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串
-E:使用扩展的正则表达式
正则表达式:
基本正则表达式
扩展正则表达式
(其匹配次数处于贪婪模式,即尽可能长的匹配。)
基本正则表达式
元字符
.:匹配任意单个字符
#grep'root.'a.txt-->显示在a.txt文件中含有root并且其后面跟了任意字符的行
*:匹配其前面的字符任意次(可以为0次)
a*b-->b,ab,aab,aaab
#grep'a*b'test.txt
.*:匹配任意长度的任意字符
a.*b:ab,aab,amnb.-->(文件中含有以a开头b结尾的行)
\?:匹配器前面的字符1次或0次(部分匹配就行)
\{m,n\}:匹配其前面的字符至少m次,至多n次.(修饰第一个\前面的字符)
#grep'a\{1,3\}b'test.txt-->匹配a至少一次至多3次
[]:匹配指定范围内的任意单个字符
[0-9]:取0-9中的任意一个数字
[^]:匹配指定范围外的任意单个字符
[^[0-9]]:非0-9的任意一个字符
字符集合
[:space:]:空白字符
[:punct:]:标点符号
[:lower:]:小写字母
[:upper:]:大写字母
[:alpha:]:大小写字母
[:digit:]:数字
[:alnum:]:数字和大小写字母
位置的锚定:
^:锚定行首,此字符后的任意内容必须出现在行首
grep"^root"/etc/passwd-->在/etc/passwd文件中以root为行首的行
$:锚定行尾,此字符前的任意内容必须出现在行尾
bash$-->以bash为行尾的行
^$:空白行
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\<abab-->abab后边还有字符,一般用于规定某个字符串不处于行尾
\>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现(用法同上)
分组:\(\)
\(ab\)*:ab可以出现任意次或0次。(将ab看成一个整体)
后向引用:后边可以调用前边出现的字符串
\(\)...\1..\2..\3
#grep'^\([0-9]\).*\1$'/etc/inittab
-->在/etc/inittab文件中,以一个数字开头并以同样的数字结尾的行
扩展正则表达式
用法:grep-E或者egrep
字符、次数匹配
.[][^]*(同基本正则表达式)
?:匹配其前的字符次或0次;
+:匹配其前的字符至少一次;相当于\(\)
{m,n}:匹配其前的字符至少m次,至多n次;相当于\{m,n}\
位置锚定与基本正则表达式相同,即
^$\<\>
分组:()相当于\(\)
同样支持后向引用:
()...\1...\2...\3...
管道和重定向:
重定向:
ls/var>/tmp/var
>>:追加输出(不覆盖)
>|:强制覆盖输出
ls/varr>/tmp/var3.out2>/tmp/var3.out
ls/var&>/tmp/var3.out
<:输入重定向 (tr'a-z''A-Z'</etc/fstab
<<:在此处生成文档
cat<<EOF/END(<<后边的是在此处结束文档)
cat>>/tmp/myfile.txt<<EOF
管道:前一个命令的输出,作为后一个命令的输入
命令1|命令2|命令3|...
#ls/var|tr'a-z''A-Z'-->将/var文件里的小写字母转换成大写字母
(组合小命令完成复杂任务)
补充
(echo"ha"|tee/var/ha.out)
或者
|:or
'(C|c)at'-->匹配Cat,cat
grep支持正则表达式
egrep支持扩展正则表达式