BRE模式


特殊字符:

. * [ ] ^ $ { } \ + ? | ( ) 


^        脱字符,匹配以特定字符串开头的行

例:echo  "This is test" |  sed  -n  '/^This/p'


$        匹配特定字符串结尾的行

例:echo  "This is a good book"  |  sed -n  '/book$/p'


匹配特定开头和特定结尾的行:

sed  -n  '/^this is a test/p'  data.txt


过滤空格行:

sed   '/^$/'  data.txt


. 点字符:

匹配除了换行之外的任意字符

sed  '/.hello/p' data.txt        只要在hello之前有任意字符就能够匹配到


[abc]字符组:

sed  '/[hc]at/p' data.txt        只匹配hat和cat的行

echo "yEs"  |  sed -n  '/[Yy][Ee][Ss]/p'


[^abc]排除字符组:

sed  -n  '/[^hc]at/p' data.txt        除了包含h或c的其他任意字符,单至少要有一个字符


[a-b]区间:

sed -n  '/[a-d]at/p'  data.txt             匹配包含a到d之间的字母开头的行

sed  -n '/[a-de-h]at/p'  data.txt       多个区间,a到d或者e到h的任意字符在at前的行

sed -n  '/^[0-9][0-9][0-9][0-9][0-9]$/p'  data.txt        匹配邮编,5位数


特殊字符组:

[[:alpha:]]        a-z A-Z

[[:alnum:]]       0-9 a-z A-Z

[[:blank:]]        空格,制表符

[[:digit:]]         0-9

[[:lower:]]        a-z

[[:upper:]]       A-Z

[[:print:]]         任意可打印字符

[[:punct:]]        匹配标点符号

[[:space:]]        任意空白字符,空格、制表符、NL、FF、VT、CR


例:echo  "abc"  |  sed -n  '/[[:digit:]]/p'


*星号:

表示其前面的字符可以出现0次或任意次

echo  "bat"  |  sed  -n '/b[ac]*t/p'        表示b和t之间可以出现任意次数的a或c,但不可以出现其他字符


ERE模式:


只有gawk可以使用的模式:

        问号,表示前面的字符出现0次或1次

        加号,表示前面的字符出现一次或多次

{m,n} 或 {m}        表示前面的字符出现m到n次,或者固定为m次,使用此模式必须要加上--re-interval选项

例:echo "bt"  | gawk --re--interval  '/be{1}t/{print $0}'

        或运算,例:echo "This is a cat" | gawk '/cat|dog/{print $0}'

( )      表达式分组,echo "cat"  |  gawk  '/(c|b)a(b|t)/{print $0}'


例:phone.list | ./isphone        phone.list为电话列表,isphone为过滤的gawk脚本


匹配电子邮件正则表达式:

^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$