处理文本的工具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