sed命令

时间:2025-01-14 18:42:08
#使用sed命令对该文件进行演示 [root@localhost ~]# cat passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ======================================= #用a参数在第一行的下面插入test [root@localhost ~]# sed '1atest' passwd root:x:0:0:root:/root:/bin/bash test bin:x:1:1:bin:/bin:/sbin/nologin #用i参数在第二行的上面插入hello [root@localhost ~]# sed '2ihello' passwd root:x:0:0:root:/root:/bin/bash hello bin:x:1:1:bin:/bin:/sbin/nologin #用c参数把第二行替换为hello [root@localhost ~]# sed '2chello' passwd root:x:0:0:root:/root:/bin/bash hello #用d参数删除匹配到‘root’的行 [root@localhost ~]# sed '/root/d' passwd bin:x:1:1:bin:/bin:/sbin/nologin #单独用s参数替换文件内容只会替换该行匹配到的第一个 [root@localhost ~]# sed 's/root/tom/' passwd tom:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin #s和g搭配使用可达到替换全部匹配到的效果 [root@localhost ~]# sed 's/root/tom/g' passwd tom:x:0:0:tom:/tom:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin #单独使用p参数可以看到不仅打印出匹配‘root’的行,还把原本内容 \ #一起显示出来了,这是因为sed的特性,文章开头的一段话就说明了。 [root@localhost ~]# sed '/root/p' passwd root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin #通常p参数会搭配-n选项一起使用,-n是静默模式 [root@localhost ~]# sed -n '/root/p' passwd root:x:0:0:root:/root:/bin/bash #用n参数读取当前行(匹配到的行)的下一行至模式空间,n参数会覆盖模式空间的 \ #前一行(也就是含有'root'的行)。此时模式空间只有‘下一行’,后面的d参数会 \ #删除模式空间的内容,所以sed会打印出含有root的行 [root@localhost ~]# sed '/root/n;d' passwd root:x:0:0:root:/root:/bin/bash #可以发现使用N参数没有内容被打印出来,是因为N参数读取当前行的下一行至模式空间时\ #并不会覆盖模式空间的上一行,此时模式空间‘当前行’与‘下一行’都存在,后面的d参数会\ #模式空间的内容,所有没有内容被打印出来 [root@localhost ~]# sed '/root/N;d' passwd [root@localhost ~]#