sed介绍:sed工具主要是替换的文本输出到屏幕上,并且还有其余更丰富的功能。
sed命令格式:sed -n 'n' p filename,单引号内的n是一个数字,表示几行。
-n选项的做用就是只显示咱们要打印的行,可有可无的内容不显示。bash
[root@localhost ~]# mkdir sed #建立一个目录 [root@localhost ~]# cd sed/ #进入到目录sed [root@localhost sed]# cp /etc/passwd test.txt #拷贝passwd文件到本目录下,而且修更名字 [root@localhost sed]# ls #查看当前目录下都有哪些文件 test.txt [root@localhost sed]# pwd #当前所在的位置 /root/sed
[root@localhost sed]# sed -n '/root/'p test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin #-n选项是指显示咱们要打印的行。
在grep中使用的特殊字符如(^ $ *等) 均可以在sed中使用。工具
[root@localhost sed]# sed -n '2,3'p test.txt bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost sed]# sed -e '1'p -e '/bus/'p -n test.txt root:x:0:0:root:/root:/bin/bash dbus:x:81:81:System message bus:/:/sbin/nologin #sed -e 实现多个行为,如我查找第一行,而且 把文档中含有bus的显示出来
[root@localhost sed]# sed -n '/bus/'Ip test.txt #这里必定要加一个大I字母。 dbus:x:81:81:System message bus:/:/sbin/nologin BUS
[root@localhost sed]# sed '1,18'd test.txt chrony:x:998:996::/var/lib/chrony:/sbin/nologin BUS #这里后面跟选项d,会把1到18行的内容删除,把后面的内容显示出来。
这里参数d表示删除的东西,它不只能够删除指定的单行以及多行,并且能够删除匹配某个字符的行,还能够删除从某一行开始到文档最后一行的全部行,这个命令仅仅是在屏幕上并不显示这些行。学习
首先先拷贝一份文件过来: [root@localhost sed]# cp test.txt test.txt.bak #拷贝过来个备份 [root@localhost sed]# ls #查看当前目录下的文件 test.txt test.txt.bak [root@localhost sed]# wc -l test.txt #wc查看一个文件有多少行 20 test.txt [root@localhost sed]# sed -i '1,18'd test.txt #-i删除1到18行。 [root@localhost sed]# wc -l test.txt #再来看这个文件有多少行。 2 test.txt
[root@localhost sed]# sed '/root/'d test.txt chrony:x:998:996::/var/lib/chrony:/sbin/nologin BUS
[root@localhost sed]# sed '1,10s/root/toor/g' test.txt #1,10是范围,后面跟s是替换,/root/替换成/toor/,g表示全局替换。 toor:x:0:0:toor:/toor:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
上述中的参数s就表示替换的动做,参数g表示本行全局替换,若是不加g只会替换本行出现的第一个。spa
第一段和最后一段替换位置code
[root@localhost sed]# head test.txt | sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:1/' /bin/bash:x:0:0:root:/root:1 /sbin/nologin:x:1:1:bin:/bin:1 /sbin/nologin:x:2:2:daemon:/sbin:1 /sbin/nologin:x:3:4:adm:/var/adm:1 /sbin/nologin:x:4:7:lp:/var/spool/lpd:1 /bin/sync:x:5:0:sync:/sbin:1 /sbin/shutdown:x:6:0:shutdown:/sbin:1 /sbin/halt:x:7:0:halt:/sbin:1 /sbin/nologin:x:8:12:mail:/var/spool/mail:1 /sbin/nologin:x:11:0:operator:/root:1
小括号在sed中属于特殊符号,必须在前面加转义字符\,替换时则携程相似\一、\2或\3的形式,上列中()把想要替换的字符打包成了一个总体,有这个转义字符\,-r选项让这个表达式更加清晰了。文档
[root@localhost sed]# head test.txt |sed 's/[a-zA-Z]//g' #这里括号里的是范围 ::0:0::/:// ::1:1::/:// ::2:2::/:// ::3:4:://:// ::4:7::///:// ::5:0::/:// ::6:0::/:// ::7:0::/:// ::8:12::///:// ::11:0::/://
[root@localhost sed]# head test.txt | sed -r 's/(.*)/aaa:&/' #&表示星号前全部 aaa:root:x:0:0:root:/root:/bin/bash aaa:bin:x:1:1:bin:/bin:/sbin/nologin aaa:daemon:x:2:2:daemon:/sbin:/sbin/nologin aaa:adm:x:3:4:adm:/var/adm:/sbin/nologin aaa:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin aaa:sync:x:5:0:sync:/sbin:/bin/sync aaa:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown aaa:halt:x:7:0:halt:/sbin:/sbin/halt aaa:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin aaa:operator:x:11:0:operator:/root:/sbin/nologin