一、什么是sed
sed(Stream EDitor)流编辑器,是一个非交互式的文本编辑器,它可以对文本文件和标准输入进行编辑,标准输入可以来自键盘输入、文件重定向、字符串、变量等。sed从文本的一个文本行或者标准输入中读取数据,将其复制到缓冲区,然后读取命令行或脚本的第一个命令,对此要求的行号进行编辑,重复此过程,直到命令行或者脚本中的所有命令都执行完毕。
sed适用于以下三种场景:
编辑相对交互式文本编辑器而言太大的文件。编辑命令太傅在,在交互式文本编辑器中难以输入的情况对文件扫描一遍,但是需要执行多个编辑函数的情况
二、sed命令组成部分
命令格式:sed [OPTION]... 'script' [input-file] ...
[OPTION]:sed 命令选项
script:sed脚本,由“地指定界编与辑命令组成”(注意此处地址定界与编辑命令中间没有任何符号)
三、sed命令常用选项及脚本详解
sed选项:
-n:不输入模式空间中的内容至屏幕
[code=bash;toolbar:false"># sed '/^#/d' fstab
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0
# sed -n '/^#/d' fstab
# 此处没有任何显示,模式空间中的内容为^#开头的文件,而剩下的被编辑命令d所删除,所以没有任何显示
# sed '/^#/p' fstab # p为显示模式空间的内容,因为默认也显示,所以此处每行出现两次
#
#
# /etc/fstab
# /etc/fstab
# Created by anaconda on Fri Mar 4 08:36:03 2016
# Created by anaconda on Fri Mar 4 08:36:03 2016
#
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# 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
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0
# sed -n '/^#/p' fstab
#
# /etc/fstab
# Created by anaconda on Fri Mar 4 08:36:03 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
#[p]# cat sed_script
# sed script
/^#/d
/^$/d
# sed -f sed_script /etc/fstab
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0[p]# sed -r '/^[[:space:]]*$/d' fstab
#
# /etc/fstab
# Created by anaconda on Fri Mar 4 08:36:03 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
#
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0
# 此处过滤出后空格行没有了[p][strong]# sed '2,+3d' fstab
# 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
#
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0
# cat fstab
#
# /etc/fstab
# Created by anaconda on Fri Mar 4 08:36:03 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
#
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0[p]# sed '/^[^#]/,/^#/d' fstab
#
# /etc/fstab
# Created by anaconda on Fri Mar 4 08:36:03 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
#
# cat fstab
#
# /etc/fstab
# Created by anaconda on Fri Mar 4 08:36:03 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
#
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults
20000
0 0[p]# sed -n '1~2p' fstab
# /etc/fstab
#
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
# sed -n '2~2p' fstab
#
# Created by anaconda on Fri Mar 4 08:36:03 2016
# Accessible filesystems, by reference, are maintained under '/dev/disk'
#
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0
# cat fstab
#
# /etc/fstab
# Created by anaconda on Fri Mar 4 08:36:03 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
#
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0[p][strong]# sed '/^#/i \new line' fstab
new line
#
new line
# /etc/fstab
new line
# Created by anaconda on Fri Mar 4 08:36:03 2016
new line
#
new line
# Accessible filesystems, by reference, are maintained under '/dev/disk'
new line
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
new line
#
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0[p]# sed -n '/^#/w newfile1' fstab
# cat newfile1
#
# /etc/fstab
# Created by anaconda on Fri Mar 4 08:36:03 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
#[p]# sed '/^#/=' fstab
2
#
3
# /etc/fstab
4
# Created by anaconda on Fri Mar 4 08:36:03 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
#
UUID=ad88b2e2-0eac-45e8-80b3-742a642827d7 / xfs defaults 0 0
UUID=756954a4-022d-4da1-abe5-ed3dc587c95a /boot xfs defaults 0 0
UUID=19dba320-753d-45b3-9071-85ae514f46e0 /usr xfs defaults 0 0
UUID=67ffa57f-07e6-426f-8914-f04154a11b47 swap swap defaults 0 0[p]