#sed [选项] ‘编辑指令’ 文件列表(多个文件间空格间隔)
前置命令 | sed [选项] ‘编辑指令’
――屏蔽默认输出,仅输出符合条件的文本
――直接修改文件内容
正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改。若希望直接修改文件内容,可添加选项 -i
――一起执行多个处理动作
如果不使用 -e ,也可以用分号来隔离多个操作
――使用sed脚本
――启用拓展的正则表达式
1)其中,“编辑指令”用来实现过滤操作,由“[定址符]处理动作”组成;
2)而“定址符”用来定义需要操作的文本,由“[地址1,[地址2]]组成,地址1为起始位置,地址2为结束位置;
3)未指定“定址符”时,默认处理所有文本;
4、处理动作(除非加上选项 �Ci ,否则不会修改原文件)
――打印行
[root@localhost ~]# sed -n '18p' /etc/inittab id:5:initdefault: [root@localhost ~]#
[root@localhost ~]# sed -n '45,50p' /etc/inittab 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 [root@localhost ~]#
[root@localhost ~]# cat -n /etc/passwd | sed -n '4,7p' 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown [root@localhost ~]# [root@localhost ~]# cat -n /etc/passwd | sed -n '4p;7p' 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown [root@localhost ~]#
[root@localhost ~]# cat -n /etc/passwd | sed -n '2,+3p' 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@localhost ~]#
――第一条命令之所以不成功是因为 命令cat 用 -n 参数输出行号后是以行号开头了;所以去掉 -n 参数
[root@localhost ~]# cat -n /etc/passwd | sed -n '/^mail/p' [root@localhost ~]# [root@localhost ~]# cat /etc/passwd | sed -n '/^mail/p' mail:x:8:12:mail:/var/spool/mail:/sbin/nologin mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin [root@localhost ~]#
―― n表示读取下一行;产生隔行操作的效果。
奇数行:p;n
偶数行:n;p
[root@localhost ~]# cat -n /etc/passwd | sed -n 'p;n' 1 root:x:0:0:root:/root:/bin/bash 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]# cat -n /etc/passwd | sed -n 'n;p' 2 bin:x:1:1:bin:/bin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 8 halt:x:7:0:halt:/sbin:/sbin/halt
[root@localhost ~]# cat -n /etc/passwd | sed -n '35,$p' 35 named:x:25:25:Named:/var/named:/sbin/nologin 36 apache:x:48:48:Apache:/var/www:/sbin/nologin 37 squid:x:23:23::/var/spool/squid:/sbin/nologin [root@localhost ~]#
[root@localhost ~]# cat -n /etc/passwd | sed -n '$=' 37 [root@localhost ~]#
――删除行
[root@localhost ~]# cat -n /etc/passwd | sed '5,8d' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 news:x:9:13:news:/etc/news:
[root@localhost ~]# cat -n /etc/passwd | sed '/mail/,~3d'
处理前:
8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 news:x:9:13:news:/etc/news: 11 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin 12 operator:x:11:0:operator:/root:/sbin/nologin 13 games:x:12:100:games:/usr/games:/sbin/nologin 14 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
处理后:
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 13 games:x:12:100:games:/usr/games:/sbin/nologin 14 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin 15 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 16 nobody:x:99:99:Nobody:/:/sbin/nologin 17 nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
[root@localhost ~]# cat -n /etc/passwd | sed '5,~4d' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 news:x:9:13:news:/etc/news:
# cat -n passwd | sed 'n~md'
最典型的应用就是删掉奇数行或偶数行
[root@localhost ~]# cat -n /etc/passwd | sed '1~2d' 2 bin:x:1:1:bin:/bin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 8 halt:x:7:0:halt:/sbin:/sbin/halt 10 news:x:9:13:news:/etc/news:
[root@localhost ~]# cat -n /etc/passwd | sed '2~2d' 1 root:x:0:0:root:/root:/bin/bash 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]# cat -n /etc/passwd | sed '/^$/d'
――替换
#sed [选项] ‘[定址符]s/源数据/新数据/选项’ 文件名
#前置命令 | sed [选项] ‘[定址符]s/源数据/新数据/选项’
定址符:
――是可选项,
源数据:
可以是文件已有的单词,也可以是正则表达式
[root@localhost ~]# cat -n /etc/passwd | sed 's/root/huanglianfeng/g' 1 huanglianfeng:x:0:0:huanglianfeng:/huanglianfeng:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat -n /etc/passwd | sed 's/bin/BIN/g' 1 root:x:0:0:root:/root:/BIN/bash 2 BIN:x:1:1:BIN:/BIN:/sBIN/nologin 3 daemon:x:2:2:daemon:/sBIN:/sBIN/nologin 4 adm:x:3:4:adm:/var/adm:/sBIN/nologin
删除所有的数字:
[root@localhost ~]# cat -n /etc/passwd | sed 's/[0-9]//g' root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x:::daemon:/sbin:/sbin/nologin
说一下: s和d都能起到删除的作用;但它们应用的地方时u区别的。
d是以行为单位删除的,比如是删掉某一行或某几行;
s是删掉某些字符,其实质是将它们替换成空字符,达到删除的效果
删掉所有数字和字母:
[root@localhost ~]# cat -n /etc/passwd | sed 's/[0-Z]//g' :::::/:// :::::/:// :::::/:// ::::://:// :::::///://
修改第2行
[root@localhost ~]# cat -n /etc/passwd | sed '2s/bin/BIN/g' 1 root:x:0:0:root:/root:/bin/bash 2 BIN:x:1:1:BIN:/BIN:/sBIN/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
源数据里面有 / 号,需要转义;每个都要
[root@localhost ~]# cat -n /etc/passwd | sed 's/\/sbin\/nologin/\/bin\/bash/' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/bin/bash 3 daemon:x:2:2:daemon:/sbin:/bin/bash 4 adm:x:3:4:adm:/var/adm:/bin/bash 5 lp:x:4:7:lp:/var/spool/lpd:/bin/bash 6 sync:x:5:0:sync:/sbin:/bin/sync
修改IP地址网段
[root@localhost ~]# sed -r '/^IPADDR/s/192.168.10.(.*)/172.16.16.\1/' /etc/sysconfig/network-scripts/ifcfg-eth0 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] DEVICE=eth0 BOOTPROTO=static HWADDR=00:0c:29:9b:2a:c7 ONBOOT=yes NETMASK=255.255.255.0 IPADDR=172.16.16.2 #GATEWAY=192.168.10.254 TYPE=Ethernet USERCTL=no IPV6INIT=no PEERDNS=yes [root@localhost ~]