26期20180704

7月4日任务
9.4/9.5 sed


sed -n '/关键字/'p 文件名



image.png

image.png

支持 . * +(脱义),如果不想脱义的话,可以使用-r选项 

image.png

其他的也都是可以匹配的,只是稍微麻烦。


如果想用sed打印指定的行

sed -n '2'p passwd

打印第二行

image.png

sed -n '2,5'p passwd

打印2-5行


sed -n '2,$'p passwd 

打印第二行到最后一行

image.png

sed -n '1,$'p passwd

打印全部的行

image.png



-e表示可以同时执行多条匹配


sed -e '1'p  -e '/root/'p -e '/oo*/'p passwd 

相当于把三个条件满足的都打印出来



另外sed也可以大小写全部打印出来,在p前面加上一个I 大写的I

sed -n  '/bus/'Ip passwd

image.png


sed还有一个作用是显示剩余的行,sed '要删除的行'd filename

sed '1,10'd test,txt

的意思就是打印删除10行后剩余的内容

当然也可以按照关键字所在的行删除显示剩余的。 比如查看非root所在行。可以 sed '/root/'d passwd

image.png

image.png

sed 有一个真正删除的选项 -i  真的会把内容进行更改

sed -i‘行'd filename

image.png

除了按照行号来删以外还可以按照关键字所在的行来删。

sed -i '/zt/'d passwd 是将含有root的那一行删掉

image.png


当然sed最重要的功能是查找替换

sed '1,10s/home/lovebay/g' passwd1

       1-10行  home换成 lovebay g代表全局 

image.png


sed替换也支持正则。

sed  -r '1,5/lov+/my/g' passwd1 记住要有一个选项 -r

image.png


下面这个替换是将第一位和最后以为进行了互换位置

sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'  [^:]非:开头  (.*):一直匹配到最后一个:的位置 最后也是一个非:开头 然后后面跟的是位置 

image.png


如果有/的时候要脱义 \ 或者有其他的符号作为分割符比如@#

head passwd1 |sed 's/\/bin\/bash/123/g'

head passwd1 |sed 's@\/bin\/bash@123@g'

image.png


如果是想把所有的英文字母删掉

head passwd1 | sed 's/[a-zA-Z]//g' 这个比较好理解

image.png


如果想在每一行前面加上aaa如何办?

两个办法,第一个办法是\1这个位置符前面加东西

head passwd1 | sed -r 's/(.*)/aaa:\1/'

image.png

或者是用&表示前面括号里的内容

image.png

image.png



猜你喜欢

转载自blog.51cto.com/13691454/2136385
今日推荐