处理文本的工具sed
Stream EDitor, 行编辑器 sed 是一种流编辑器,它一次处理一行内容。处理时,把 当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space ),接着用sed 命令处理缓冲区中的内容 ,处理完成后,把缓冲区的内容送往屏幕。接着处理下一 行,这样不断重复,直到文件末尾。文件内容并没有改变 ,除非你使用重定向存储输出。Sed 主要用来自动编辑一 个或多个文件, 简化对文件的反复操作,编写准换程序等。
sed
用法:
sed [option]... 'script' inputfile...
常用选项:
-n :不输出模式空间内容的自动打印
-e: 多点编辑
[root@localhost ~]# sed -e '2,10d' -e '/rpc/,/rooter/d' f1
root:x:0:0:root:/root:/bin/bash
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
colord:x:996:994:User for colord:/var/lib/colord:/sbin/nologin
libstoragemgmt:x:995:992:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
-f / PATH/TO/SCRIPT_FILE : 从指定文件中读取编辑脚本
[root@localhost ~]# cat f2
{lasfhakshfkasdlajsflda;fjlaksdfjlkas}if
asdfasljfdalsjdfalkjfdlajf
skdjafksafhakhsfakhfahflahfasfjk
skdjafksafhakhsfakhfahflahfasfjk
asdkfalksdfjal;sdjfklasdf
skdjafksafhakhsfakhfahflahfasfjk
[root@localhost ~]# sed -nf f1 f2
asdfasljfdalsjdfalkjfdlajf
-r: 支持使用扩展正则表达式
[root@localhost ~]# echo "/etc/functions" | sed -r 's@/.*/([^/]+/?$)@\1@'
functions
-i: 原处编辑
-i.bak
在对file操作之前先对file进行备份,备份的文件名是file.bak
script:脚本
地址+命令
地址定界:
(1) 不给地址:对全文进行处理
(2) 单地址: #: 指定的行
/pattern/ :被此处模式所能够匹配到的每一行
[root@localhost ~]# cat /etc/fstab | sed -n '/^U/p'
UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 / xfs defaults 0 0
UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot xfs defaults 0 0
UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr xfs defaults 0 0
UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap swap defaults 0 0
(3) 地址范围: #,#
[root@localhost ~]# sed -n '9,12p' /etc/fstab
UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 / xfs defaults 0 0
UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot xfs defaults 0 0
UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr xfs defaults 0 0
UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap swap defaults 0 0
#,+#
[root@localhost ~]# sed -n '3,+4p' /etc/fstab
# /etc/fstab
# Created by anaconda on Mon Jul 25 12:04:17 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/pat1/,/pat2/
[root@localhost ~]# sed -n '/^root\b/,/^s/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
#,/pat1/
[root@localhost ~]# sed -n '1,/^s/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
(4) ~ :步进
1~2 奇数行
2~2 偶数行
编辑命令:
d: 删除模式空间匹配的行
[root@localhost ~]# cat f1
1
2 #
3 # /etc/fstab
4 # Created by anaconda on Mon Jul 25 12:04:17 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 / xfs defaults 0 0
10 UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot xfs defaults 0 0
11 UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr xfs defaults 0 0
12 UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap swap defaults 0 0
[root@localhost ~]# sed '3d' f1
1
2 #
4 # Created by anaconda on Mon Jul 25 12:04:17 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 / xfs defaults 0 0
10 UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot xfs defaults 0 0
11 UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr xfs defaults 0 0
12 UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap swap defaults 0 0
p: 显示模式空间中的内容
[root@localhost ~]# sed -n '3p' f1
3 # /etc/fstab
a \text :在行后面追加文本;支持使用\n 实现多行追加
[root@localhost ~]# sed '3a\skdfjskdfjksdf' f1
1
2 #
3 # /etc/fstab
skdfjskdfjksdf 4 # Created by anaconda on Mon Jul 25 12:04:17 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 / xfs defaults 0 0
10 UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot xfs defaults 0 0
11 UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr xfs defaults 0 0
12 UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap swap defaults 0 0
i \text :在行前面插入文本;支持使用\n 实现多行插入
[root@localhost ~]# sed '3i\123456' f1
1
2 #
123456
3 # /etc/fstab
4 # Created by anaconda on Mon Jul 25 12:04:17 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 / xfs defaults 0 0
10 UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot xfs defaults 0 0
11 UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr xfs defaults 0 0
12 UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap swap defaults 0 0
c \text :替换行为单行或多行文本
[root@localhost ~]# sed '3c\123456abcdefg' f1
1
2 #
123456abcdefg
4 # Created by anaconda on Mon Jul 25 12:04:17 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 / xfs defaults 0 0
10 UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot xfs defaults 0 0
11 UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr xfs defaults 0 0
12 UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap swap defaults 0 0
w /path/to/somefile: 保存模式匹配的行至指定文件
r /path/from/somefile :读取指定文件的文本至模式空
间中匹配到的行后
=: 为模式空间中的行打印行号
[root@localhost ~]# sed = fstab
1
2
#
3
# /etc/fstab
4
# Created by anaconda on Mon Jul 25 12:04:17 2016
5
#
6
# Accessible filesystems, by reference, are maintained under '/dev/disk'
7
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8
#
9
UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 / xfs defaults 0 0
10
UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot xfs defaults 0 0
11
UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr xfs defaults 0 0
12
UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap swap defaults 0 0
[root@localhost ~]#
!: 模式空间中匹配行取反处理
-
sed搜索替换 s/// :查找替换, 支持使用其它分隔符,s@@@ ,s### [root@localhost ~]# sed 's/root/god/' f3 god god god root root 替换标记: g: 行内全局替换 [root@localhost ~]# sed 's/root/god/g' f3 god god god god god p: 显示替换成功的行 w /PATH/TO/SOMEFILE :将替换成功的行保存至指定的文件中
-
sed高级编辑命令
高级编辑命令: h: 把模式空间中的内容覆盖至保持空间中 H :把模式空间中的内容追加至保持空间中 g: 从保持空间取出数据覆盖至模式空间 G :从保持空间取出内容追加至模式空间 x: 把模式空间中的内容与保持空间中的内容进行互换 n: 读取匹配到的行的下一行 覆盖 至模式空间 N :追加匹配到的行的下一行至模式空间 d: 删除模式空间中的行 D :删除 当前模式空间开端至\n 的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed nl file 加行号
原创文章,作者:dxkboke,如若转载,请注明出处:http://www.178linux.com/32521

