Linux20180427六周第二次课(4月26日)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux20180427六周第二次课(4月26日)相关的知识,希望对你有一定的参考价值。

 六周第二次课(4月26日)

9.4/9.5 sed 



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



技术分享图片

技术分享图片

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

技术分享图片

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


如果想用sed打印指定的行

sed -n '2'p passwd

打印第二行

技术分享图片

sed -n '2,5'p passwd

打印2-5行


sed -n '2,$'p passwd 

打印第二行到最后一行

技术分享图片

sed -n '1,$'p passwd

打印全部的行

技术分享图片



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


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

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



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

sed -n  '/bus/'Ip passwd

技术分享图片


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

sed '1,10'd test,txt

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

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

技术分享图片

技术分享图片

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

sed -i‘行'd filename

技术分享图片

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

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

技术分享图片


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

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

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

技术分享图片


sed替换也支持正则。

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

技术分享图片


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

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

技术分享图片


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

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

head passwd1 |sed '[email protected]\/bin\/[email protected]@g'

技术分享图片


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

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

技术分享图片


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

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

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

技术分享图片

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

技术分享图片

技术分享图片

以上是关于Linux20180427六周第二次课(4月26日)的主要内容,如果未能解决你的问题,请参考以下文章

六周第二次课(1月16日)

Linux20180421五周第二次课(4月19日)

Linux20180421五周第二次课(4月19日)

Linux20180421五周第二次课(4月19日)

Linux20180421五周第二次课(4月19日)

2018.4.26 六周第二次课 (正则sed 替换)