shell学习笔记一
1、方括号表达式
在方括号表达式中,所有其他的mete字符(即元字符,特殊字符)都会失去其特殊含义。
eg:[*\.]匹配于字面上的星号、反斜杠和句点。
另外,要让 ] 进入该集合,可以将它防盗列表的最前面。
1 >cat tmp
2 ab]cdef
3 acdg
4 cd
5 a-g
6 >grep []] tmp
7 ab]cdef
如果有减号字符进入该集合,也应该放到最前端,如果两者都有 ,则将右方括号放到第一个字符,减号放到最后一个字符。
2、后向引用
BRE(在ERE中并不存在)提供了一种叫后向引用的机制(backreferences),意思是“匹配于正则表达式匹配的先前部分”。
一共需要两个步骤,第一步:将子表达式包围在\(和\)里面,单个模式里可包括最多9个子表达式,且可以嵌套结构;
第二步:在同一模式之后使用\DIGIT,DIGIT指的是介于1至9的数字,意思是“匹配于先前括号内匹配成功的第DIGIT个字符”。
3、交替
方括号表达式易于表示“匹配于此字符、其他字符,或者...”,但不能指定“匹配于这个序列、其他序列。或者...”,而要到达这个目的,可以使用交替(alternation)运算符,或称为管道字符(|)。交替运算符在ERE运算符优先级是最低的。
4、停驻文本匹配
在ERE里,^ 和$永远是meta字符,而在BRE中,这两个字符如果不是在字符首或尾,则表示字面值。在ERE中,像ab^cd&gb仍然是有效的,只是无法匹配任何东西。
5、sed插入
1 $ cat tmp
2 hello, welcome to linux's world!
3
4 $ sed 's/hello/&, lyj/' tmp
5 hello, lyj, welcome to linux's world!
6、sed的替换
在s命令以g结尾表示全局性,意思是“替换文本取代正则表达式中每一个匹配的”,如果没有设置g,sed只会取代第一个匹配的,还可以在结尾指定数字,指示第n个匹配出现才匹配。