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

9.4/9.5 sed

sed的强项在于查找替换
#sed  '/root/'p passwd     匹配出含有root的内容,p是打印的意思
六周第二次课(4月26日)

-n选项,和p一起使用,只打印出匹配的行

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


sed中也是支持+的,不过要使用\来脱义,或者加上-r选项(类似于grep -E)

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


打印指定的行

#sed -n '2'p passwd           //打印出第二行的内容

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

# sed -n '2,5'p passwd        //打印2到5行的内容

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

#sed -n '25,$'p passwd      //打印25行到末尾的内容

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

# sed -n '1,$'p passwd     //打印全部的内容,图略


在同一个sed表达式中多次匹配   -e

# sed -n -e '/mail/'p -e '/spool/'p passwd  

//对每一行依次进行mail和spool匹配,每次匹配到就打印一次,所以下面两个共有的行就打印了2次

//-e可以有多个

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


匹配的时候不区分大小写,-I

# sed -n '/bus/'Ip test1
六周第二次课(4月26日)


过滤掉指定的行

# sed '1,25'd test1    //过滤掉1到25的内容,也就是显示第25行之后的,并没有删除文件内容,原文件还是33行

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


-i 删除掉指定的行(会修改文件内容)

# sed -i '1,25'd test1     //删除1到25行的内容

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

# sed -i '/test1/'d test1   //删除掉含有test1的行

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


查找替换

sed  '1,5s/root/toor/g' test1      //把1到5行中的root替换为toor

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


# tail test1 |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'

把文件中的首段和末段颠倒位置

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

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


对于查找替换的内容里有/字符的,要用\,@或#来脱义

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


把文档里的所有英文字母删除掉

# tail test1 |sed 's/[a-zA-Z]//'

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



在所有的行前面添加固定字符串

# tail test1 |sed -r 's/(.*)/ccc:&/'           //&表示小括号里的内容

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