了解正则表达式的语法
元字符
匹配除换行符以外的任意一个单个字符
*匹配任意一个在它前面的字符
[...]匹配方括号中的字符类中的任意一个,如果方括号中的第一个字符为脱字符符号(^)则表示否定匹配
^如果作为正则表达式的第一个字符,则表示匹配行的开始,在awk中匹配字符串的开始,即使字符串包含嵌入的
换行符
$如果作为正则表达式的最后一个字符,则表示匹配行的结尾,在awk中匹配字符串的结尾,
即使字符串包含嵌入的换行符
\{n,m\}匹配他前面某个范围内单个字符出现的次数(包括由正则表达式指定的字符) \{n、}将匹配n次出现
\{n\}至少匹配有n次出现,而且\{n,\m}匹配n和m之间的任意次出现,
扩展的元字符
+匹配一次或者多次的出现
?0或者1次出现
|指定可以匹配前面的或者后面的
()对正则表达式进行分组
{n,m}匹配前面的某个范围内单个字符出现的次数
[Ww]hat匹配what,What
\.H[12345]匹配.H1,.H2,.H3,.H4,.H5
$grep '[my]' list*
字符的范围
[A-Z]用于指定范围
数字的范围[0-9]
匹配文章的标题
[cC]Hapter[1-9]
[0-9a-z?,.;:'"]任意单个字符,可以是数字,小写字母,问号,逗号
[a-zA-Z][.?!]匹配后面跟有句点,问号或感叹号的小写或者大写字母
日期类
MM-DD-YY
MM/DD/YY
[0-1][0-9][-/][0-3][0-9][-/][0-9][0-9]其中-/表示上面分隔符
排除字符类
[^0-9]匹配所有大写小写以及所有的特殊字符
[^aeiou]匹配所有非原音字符
\.DS "[^1]"不匹配.DS "[1]"
posix字符类
[:alnum:]可打印的字符
[:alpha:]字符类
[:blank:]空格和制表符
[:cntrl:]控制字符
[:digit:]数字字符
[:graph:]可打印的和可见(不包括空格)的
[:lower:]小写字符
[:print:]可打印包括空白
[:punct:]标点符号字符
[:space:]空白字符
[:upper:]大写字符
[:xdigit:]十六进制数字
text
1
5
10
50
100
500
1000
5000
*表示他前面的表达式可以出现一次或者多次
grep '[15]0*' text
1
5
10
50
100
500
1000
5000
grep '[15]00*' text第一个值是字面值,第二个值是由*修饰
10
50
100
500
1000
5000
匹配任意字符串 “.*”
"books*"会匹配book,books
"book.*"匹配任意字符的零次或者多次的出现
“book.?”匹配book或者book加上一个任意字符,bookish就不匹配
定位元字符
行首^
行末$
'^$'空行或者‘^ *$’或者‘^.*$’
字符的跨度
\{n,m\}
社会保险号为
[0-9]\{3\}-[0-9]\[2\]-[0-9]\{4\} 三个数字一个连字符两个数字一个连字符四个数字
北美地区的电话号码
[0-9]\{3\}-[0-9]\{4\}
分组操作
圆括号()用于对正则表达式进行分组并且设置优先级
egrep 'Labb(abc)?s'
Labbabc
Labb
compan(y|ies)指定单数或者负数匹配
编写sed脚本
sed命令可以指定零个,一个两个地址,
若没有指定地址,那么命令将应用于这个地址匹配的任意行
如果只有一个地址,那么命令应用于这个地址匹配的任意行
如果指定了由逗号分隔的两个地址,那么命令应用于第一个
地址一行和他后面的行,直到指定匹配的第二个地址的行
如果地址后面跟有叹号,那么命令就应该用于不匹配该地址的
所有行
删除命令d,不会输出,他会删除所有行
1d第一行
$d最后一行
当正则表达式作为地址提供时,这个命令将会模式匹配的行
必须加/
/^$/d删除空行
50,$d50到最后一行
1,/^$/d删除从第一行到第一个空行的所有行
分组命令
sed使用大括号({})将一个地址嵌套在另一个地址中,或者在相同的地址上应用多个命令