正则表达式一点点知识

1470阅读 0评论2011-11-24 suanmeilizhi
分类:LINUX

最近在学习shell,而CU里面比较火的帖子是网中人《shell十三问?》和wingger《基础十二篇》,在这里先感谢两位大大为吾等新手提供这么好的资料。以下是自己摘自跟贴网友的一部分内容,如有错误,麻烦各位指点轻拍,哇嘎嘎。
^[the]:匹配以t或h或e开头的行;
^the:匹配以the开头的行;
[a-z][a-z]*:匹配至少一个小写字母(注意*在RE和wildcard中的区别,可以加上""避免wildcard expansion的处理);
De[Vv]ice\.:匹配DeVice.或者Device.的行;
^ [^|] :不以|开头的行;
[000*]:没有任何的意义;
[^0-9\$]:匹配非数字且非$字符(注意\的作用);
[^0-9A-Za-z] :对于非数字且非字母;

另外,要注意边界符(boundary)的重要性,例如:
  1. lee@ubuntu:~/shell_study/test_find$ ls -al
  2. 总用量 16
  3. drwxr-xr-x 3 lee lee 4096 2011-11-24 20:11 .
  4. drwxr-xr-x 7 lee lee 4096 2011-11-23 12:23 ..
  5. drwxr-xr-x 2 lee lee 4096 2011-11-23 10:05 test
  6. -rwxr--r-- 1 lee lee 0 2011-11-24 20:11 test1
  7. -rw-r--r-- 1 lee lee 123 2011-11-23 10:08 test.sh
如果这样输入:
  1. lee@ubuntu:~/shell_study/test_find$ ls -al | grep "rw"
  2. drwxr-xr-x 3 lee lee 4096 2011-11-24 20:11 .
  3. drwxr-xr-x 7 lee lee 4096 2011-11-23 12:23 ..
  4. drwxr-xr-x 2 lee lee 4096 2011-11-23 10:05 test
  5. -rwxr--r-- 1 lee lee 0 2011-11-24 20:11 test1
  6. -rw-r--r-- 1 lee lee 123 2011-11-23 10:08 test.sh
因为我们并没有指定rw是边界字符,所以只要含有"rw"的结果都会列出来。

锚点(anchor):用来标示RE匹配的位置:
^:行首,比如^abc 匹配以字符串abc开头的行;
$:行尾,比如abc$匹配以字符串abc结尾的行;
\<:词首,比如\
\>:词尾,比如abc\>匹配以abc结尾的词,并打印该词所在的行

BRE(Basic Regular Expression)(grep和sed使用)运算符优先级(由高到低):
 

ERE(egrep和awk使用)运算符优先级:

好像方括号表达式[..]有bug。

匹配包含空格的的空行:'^ *$'
在sed和(grep)中,只有当“^”和"$"分别处于行首和行尾时,才有特殊作用。而在awk中,它们总是特殊的,即使它们可能使编写的正则表达式不匹配任何东西。

在POSIX扩展中,
?等价于\{0,1\}
*等价于\{0,\}
+等价于\{1,\}



上一篇:关于UNIX和Linux系统下SUID、SGID的解析(转自网络)
下一篇:grep一点点知识