sed 's///g' 与sed 's///' 其实是有很大区别的,要是不注意肯定出错,请看例子:
题目:删除一个文件里开头的空白
|
ps: /^ */ 匹配以空格开头的字符
/^\s/ 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
/^[[:space:]]*/ 匹配以空格或者是\t制表符开头的字符
|
|
amp1:~
aaaaaaaaaa
bbbbbbbbbb
cccc ccccc ccccc
dddddd dddddd dddddd
yyyyyyyy yyyyyyyyyyyyy yyyyyyyyyyyyyy
ooooooo ooooooo oooooo ooooooo
|
|
amp1:~
aaaaaaaaaa
bbbbbbbbbb
cccccccccccccc
dddddddddddddddddd
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
ooooooooooooooooooooooooooo
|
|
amp1:~
aaaaaaaaaa
bbbbbbbbbb
cccc ccccc ccccc
dddddd dddddd dddddd
yyyyyyyy yyyyyyyyyyyyy yyyyyyyyyyyyyy
ooooooo ooooooo oooooo ooooooo
|
|
amp1:~
aaaaaaaaaa
bbbbbbbbbb
cccc ccccc ccccc
dddddd dddddd dddddd
yyyyyyyy yyyyyyyyyyyyy yyyyyyyyyyyyyy
ooooooo ooooooo oooooo ooooooo
|
|
amp1:~
aaaaaaaaaa
bbbbbbbbbb
cccc ccccc ccccc
dddddd dddddd dddddd
yyyyyyyy yyyyyyyyyyyyy yyyyyyyyyyyyyy
ooooooo ooooooo oooooo ooooooo
|
从上面的分析,可以的知道在sed命令的s模式中,g是起到一个全局的作用,这个范围是每一行,也就是说是一行为单位,作为一个全局。
|
+g :匹配每一行有行首到行尾的所有字符
不加g:匹配每一行的行首开始匹配,匹配到第一个符合的字段,就会结束,跳到下一行
|
验证:
|
amp1:~
hello hello hello
hello hello
hello hello hello
|
|
amp1:~
nihao hello hello
nihao hello
nihao hello hello
|
|
amp1:~
nihao nihao nihao
nihao nihao
nihao nihao nihao
|
|
amp1:~
nihao hello hello
hello hello
nihao hello hello
|
|
amp1:~
nihao hello hello
hello hello
nihao hello hello
|