.点 匹配任意单个字符。如:rat、rut、r t。
^ 匹配一行的开始。
$ 匹配一行的结尾。
* 匹配0个或多个*前面的字符。
+ 匹配1个或多个+前面的字符。
? 匹配0个或1个?之前的字符。
\ 转义
[] 匹配括号中的任何一个字符。如:[abd]、[0-9]。
[^] 匹配不在括号中的,表示排除。如:[^abd]。
\< 匹配词的开始
\> 匹配次的结尾。如:\<the\>。
() 分组。将匹配这个表达式的字符保存到一个临时区域(最多保存9个),它们可以用\1到\9来引用。
| 或。例如:(him|her)。
基本元字符集
{m} 前面的表达式重复m次。如:"\w{2}" 相当于 "\w\w"。
{m,n} 表达式至少重复m次,做多重复n次。如:"ba{1,3}"匹配"ba"或"baa"或"baaa"。
{m,} 表达式至少重复m次。
\w 任意一个字母或数字或下划线。
\d 任意一个数字。
\s 空格、制表符、换页符、空白符中的任意一个。
\b 匹配一个单词的边界。如: ".\b." 在匹配 "@@@abc" 时匹配到的内容是:"@a"。
正则表达式应用实例
在日志中查找特定日期的记录
#grep "^Feb 11" messages
在日志中查找apache关闭的时间
#grep "down$" error_log
计算文件中有多少空行
#grep -c "^$" messages anaconda.log
匹配不同写法的“object oriented”
#grep "\([oO]bject\(\ |\-\)[oO]riented\)" file
正则表达式应用实例
#egrep ".ello" hello.txt
#egrep "*ello" hello.txt
#egrep "?ello" hello.txt
#egrep "+ello" hello.txt
#egrep "(.*)ello" hello.txt
#egrep "(.?)ello" hello.txt
#egrep "(.+)ello" hello.txt
正则表达式应用实例
不显示以a-z开头的单词
#egrep "^[^a-z]" linux.words在日志中查找named的pid
#egrep "named\[[[:digit:]]+\]" message过滤数字
#egrep "[0-9]{3}" number
#egrep "[0-9]{1,3}" number
#egrep "[0-9]{3,}" number
#egrep "(([0-9]{1,3}\.){3})([0-9]{1,3})" number
命令或 . [ ] ^ $ \( \) \{ \} ? + | ( )
环境
vi X X X X X
awk X X X X X X X X
sed X X X X X X
grep X X X X X X
egrep X X X X X X X X X
perl X X X X X X X X X