sed编辑器被称做流编辑器(stream editor),和普通的交互式文本编辑器刚好相反。在交互式文本编辑器中(好比vim),你能够用键盘命令来交互式的插入、删除或者替换数据中的文本。流编辑器则会自爱编辑器处理数据以前基于预习提供的一组规则来编辑数据流。正则表达式
sed编辑器能够根据命令来处理数据流中的数据,这些命令要么从命令行输入,要么存储在一个命令文件中。sed会执行下列操做:vim
(1)一次从输入中读取一行数据。 (2)根据所提供的编辑器命令匹配数据 (3)安装命令修改流中的数据 (4)将新的数据输出到STDOUT
在流编辑器将全部命令与一行数据匹配完毕后,它会读取下一行数据并重复这个过程。在流编辑器处理完流中的全部数据行后,它就会终止。bash
因为命令是按顺序逐行执行的,sed编辑器只需对数据流进行以便处理就能够完成编辑操做。这使得sed编辑器要比交互式编辑器快得多,能够快速完成对数据的自动修改。编辑器
用法命令行
sed [option]… 'script' intputfile
-n:不输出模式空间内容到屏幕,既不自动打印 -e:多点编辑 -f:/PATH/SCRIPT_FILE:从指定文件中读取编辑脚本 -r:支持使用扩展正则表达式 -i.bak:备份文件并原处编辑
script:
"地址命令"3d
(1)不给地址:对全文进行处理code
(2)单地址:ip
#:指定的行 /pattern/:被此处模式所可以匹配到的每一行
(3)地址范围:string
#,# #,+# /pat1/,/pat2/ #,/pat1/
(4)~:步进
1~2 奇数行
2~2 偶数行it
d:删除模式空间匹配的行 p:显示模式空间中的内容 a[\]text:在指定行后面追加文本,支持使用\n实现多行追加 i[\]text:在行前面插入文本 c[\]text:替换行为单行或多行文本 w /path/somefile:保存模式匹配的行至指定文件 r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后 = :为模式空间中的行打印行号 ! :模式空间中匹配行取反处理 s/oldstr/newstr/:查找替换,支持使用其它分隔符,s@@@,s### 替换标记: g:行内全局替换 p:显示替换成功的行 w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
[root@local ~]# sed -n '2p' /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin
[root@local ~]# sed -n '1,4p' /etc/passwd root:x:0:0:root:/root:/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
[root@local ~]# sed -n '/root/p' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
[root@local ~]# sed -n '1,/root/p' /etc/passwd root:x:0:0:root:/root:/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 sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
[root@local ~]# sed -n '/^$/=' /etc/fstab 1
[root@local ~]# sed '/root/a\superman' /etc/passwd root:x:0:0:root:/root:/bin/bash superman bin:x:1:1:bin:/bin:/sbin/nologin [……] operator:x:11:0:operator:/root:/sbin/nologin superman games:x:12:100:games:/usr/games:/sbin/nologin [……]
[root@local ~]# sed '/root/i\superman' /etc/passwd superman root:x:0:0:root:/root:/bin/bash [……] mail:x:8:12:mail:/var/spool/mail:/sbin/nologin superman operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin [……]
[root@local ~]# sed '/root/c\superman' /etc/passwd superman bin:x:1:1:bin:/bin:/sbin/nologin [……] mail:x:8:12:mail:/var/spool/mail:/sbin/nologin superman games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [……]
[root@local ~]# sed '1,10d' /etc/passwd 或[root@local ~]# cat -n /etc/passwd |sed '1,10d' 11 games:x:12:100:games:/usr/games:/sbin/nologin 12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 13 nobody:x:99:99:Nobody:/:/sbin/nologin 14 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
[root@local ~]# nl /etc/passwd |sed '2a tea' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin tea 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@local ~]# sed -n 's/root/&superman/p' /etc/passwd rootsuperman:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/rootsuperman:/sbin/nologin
[root@local ~]# sed -n 's/root/superman&/p' /etc/passwd supermanroot:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/supermanroot:/sbin/nologin
[root@local ~]# sed 's/UUID/hahaha/g' /etc/fstab [……] hahaha=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 hahaha=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 hahaha=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
[root@local ~]# sed -e 's/UUID/hahaha/g' -e 's/=/###/g' /etc/fstab [……] hahaha###227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 hahaha###7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 hahaha###12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
先把/etc/fstab复制到当前目录下,以防止直接修改 [root@local ~]# cp /etc/fstab . [root@local ~]# sed -i.bak 's/=/$$$$$/g' fstab [root@local ~]# cat fstab fstab.bak [……] UUID$$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 UUID$$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 UUID$$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0 [……] UUID=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 UUID=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 UUID=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0 [root@local ~]#
[root@local ~]# cat script1.sed s/=/$$$$/ s/UUID/mytest/ [root@local ~]# sed -f script1.sed fstab [……] mytest$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 mytest$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 mytest$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0