grep、sed、awk、perl等对正则表达式的支持的差别

时间:2021-01-19 17:41:19

转自:http://cache.baidu.com/c?m=9d78d513d99601f81afa940f1a60d3716a5197133dc0a61168d5e35fe5634c35317195bd30561013d2b56b1702b83e2afd803065407737c6e8dff83cc9fcd27620d26172320b87320fce43f4dc46529173cb0caeb81990ebad6d8efd8680831208900e5a2d9da0d50755099129a74b2cb2a6991c125d43bcbe3035fb5d217d942843b147aeb73639108181871a139d&p=9c33831c86cc42a95ea6cb2d021c9c&user=baidu&fm=sc&query=grep+%D6%A7%B3%D6%D5%FD%D4%F2%B1%ED%B4%EF%CA%BD&qid=cd25d6fc15b02528&p1=2

在各种常用的工具中,

正则表达式 如此的相似却又不同。
下表列出了一些常用的 正则表达式 ,以及其不同之处。
项目总多,遗漏必有不少,请各位看官不吝指出。
以perl的正则为基准,不同的用法以粉红色标出。


grep 2.5.1 egrep 2.5.1 sed 3.02
sed 4.07
awk 3.1.1 perl 5.8.0 vim 6.1 JavaScript ??
转义 \ \ \ \ \ \ \
行头 ^ ^ ^ ^ ^ ^ ^
行尾 $ $ $ $ $ $ $
n个 {n} {m,n} {m,} {,n} \{n\} {n} \{n\} {n}或\{n\} 仅定义 --posix 或 --re-interval有效(要表达}和{,得用\\{和\\} 没有定义--posix或--re-interval时,不能用{n}的语法, \}\{和}{同义 {n} \{n\} {n}
{0,} * * * *或\*, (要表达*,得用\\*) * * *
{1,} \+ + \+ +或\+, (要表达+, 得用\\+) + \+ +
{0,1} \? ? \? ?或\?, (要表达?, 得用\\?) ? \? ?
任意字符 . . . . 含\n. . /s修饰后则含\n . 除\n . 除\n
(pat) 匹配并获结果 \(pat\) (pat) \(pat\) (pat)或\(pat\) (要表达括号,用\\( \\) ) (pat) \(pat\) (pat)
(?:pat) 匹配但不获结果 支持 支持 支持 支持 (?:pat) 支持 (?:pat)
(?=pat) 等于预查 支持 支持 支持 支持 (?=pat) 支持 (?=pat)
(?!pat) 不等预查 支持 支持 支持 支持 (?!pat) 支持 (?!pat)
| 或 \| | \| |或\| (要表达|,得用\\|) | \| |
其中任意字符 [xyz] [xyz] [xyz] [xyz] [xyz] [xyz] [xyz]
[.ch.] [=ch=] 支持 支持 [.ch.] 支持 支持 支持 支持
单词边界 \b \b \b \b 支持 \b 支持 \b
非单词边界 \B \B \B \B 支持 \B 支持 \B
单词左右边界 <> \< \> \< \> \< \> 支持 (><和\>\<和\\>\\<同义 支持(><和\>\<同义 \< \> 支持(><和\>\<同义
控制字符 /cx 支持 支持 \cx 支持 \cx 支持 \cx
数字\d 支持 支持 支持 支持 \d \d \d
非数字\D 支持 支持 支持 支持 \D \D \D
换页 \f 支持 支持 高版本支持 \f \f 另义 \f表示文件名字符 \f
换行 \n 支持 支持 支持 \n \n \n \n
回车 \r 支持 支持 \r \r \r \r \r
空白 \s 支持 支持 支持 支持 \s \s \s
非空白 \S 支持 支持 支持 支持 \S \S \S
制表符 \t 支持 支持 高版本支持 \t \t \t \t
垂直制表符 \v 支持 支持 高版本支持 \v \v 另义 \v表示very magic \v
单词字符 \w [A-Za-z0-9_] \w \w \w 支持 \w \w \w
非单词字符 \W [^A-Za-z0-9] \W \W \W 支持 \W \W \W
\xn 16进制 支持 支持 高版本支持 \xn \xn 另义 \x表示[0-9A-Za-z] \xn
\n 八进制 支持 支持 支持 \n \n 支持 \n
\n 后向引用 \n \n \n \n 仅取结果可用 \n \n 仅取结果可用 \n
[:alnum:] 字母和数字 [:alnum:] [:alnum:] [:alnum:] [:alnum:] [:alnum:] [:alnum:] 支持
[:alpha:] 字母 [:alpha:] [:alpha:] [:alpha:] [:alpha:] [:alpha:] [:alpha:] 支持
[:cntrl:] 控制字符 [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] 支持
[:digit:] 数字 [:digit:] [:digit:] [:digit:] [:digit:] [:digit:] [:digit:] 支持
[:graph:] 可打印字符(不含空格) [:graph:] [:graph:] [:graph:] [:graph:] [:graph:] [:graph:] 支持
[:lower:] 小写 [:lower:] [:lower:] [:lower:] [:lower:] [:lower:] [:lower:] 支持
[:print:] 可打印字符(含空格) [:print:] [:print:] [:print:] [:print:] [:print:] [:print:] 支持
[:punct:] 标点 [:punct:] [:punct:] [:punct:] [:punct:] [:punct:] [:punct:] 支持
[:space:] 空格 [:space:] [:space:] [:space:] [:space:] [:space:] [:space:] 支持
[:upper:] 大写字母 [:upper:] [:upper:] [:upper:] [:upper:] [:upper:] [:upper:] 支持
[:xdigit:] 16进制数字 [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] 支持
[:return:] 支持 支持 支持 支持 支持 [:return:] 支持
[:tab:] 支持 支持 支持 支持 支持 [:tab:] 支持
[:escape:] 支持 支持 支持 支持 支持 [:escape:] 支持
[:backspace:] 支持 支持 支持 支持 支持 [:backspace:] 支持