sed 是流编辑器,但是它不会修改源文件。
sed (流文本编辑器)
用法:sed OPTIONS… [SCRIPT] [INPUTFILE…]
-r: 使用扩展的正则表达式;
-n, --quiet, --silent: 不输出模式空间的内容;
-i:直接编辑原文件;
-e: -e ‘’ -e ‘’ -e ‘’
‘CMD1;CMD2;CMD3’
-f /path/to/sed_script:从指定的文件读取处理脚本
1 模式空间是什么?
模式空间其实就是内存中一个空间,归sed所有s。ed读取流文本文件的时候,每次读取一行,然后载入内存中,这个内存就成为模式空间。那么我们编辑的内容是属于模式空间中的内容,而不是源文件内容。
[root@hadoop1 shelltest]# sed '1,10d' /etc/fstab
UUID=04777095-5e99-46d5-87cf-1bc6665635ee swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@hadoop1 shelltest]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jan 26 09:32:28 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=b8a0a61e-c5e1-40e7-9a4f-e9a9096565a9 / ext4 defaults 1 1
UUID=a4623924-f98a-47c9-a9e7-38c06e0fc7f6 /boot ext4 defaults 1 2
UUID=04777095-5e99-46d5-87cf-1bc6665635ee swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@hadoop1 shelltest]#
sed ‘1,10d’ /etc/fstab 这一句语句的执行逻辑是,sed把内容读到模式空间中,判断是不是1——10的内容,是的话执行删除命令d,所以删除了1——10行内容,11行以后的内容就显示出来了。
sed的工作流程可以总结为:
第一步:提取一行内容到模式空间
第二步:针对模式空间中的内容执行编辑命令。
第三步:将模式空间中的内容进行输出。
第四步:清空模式空间。
2 地址定界:
#(行号): 指定行
$: 最后一行
/regexp/:任何能够被regexp匹配到的行
%regexp%: 任何能够被regexp匹配到的行;换用%为边界符号;
/regexp/I
%regexp%I:匹配时忽略字符大小写;
addr1, addr2: 指定范围内的所有行:
1·,/regexp/
#(行号),#(行号)
/regexp/,/regexp/
#(行号),+#
first~step:指定起始位置,以及步长 1~3
[root@hadoop1 shelltest]# sed '$d' /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jan 26 09:32:28 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=b8a0a61e-c5e1-40e7-9a4f-e9a9096565a9 / ext4 defaults 1 1
UUID=a4623924-f98a-47c9-a9e7-38c06e0fc7f6 /boot ext4 defaults 1 2
UUID=04777095-5e99-46d5-87cf-1bc6665635ee swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
[root@hadoop1 shelltest]#
以上功能是删除了最后一行。
[root@hadoop1 shelltest]# sed '/dev/d' /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jan 26 09:32:28 2016
#
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b8a0a61e-c5e1-40e7-9a4f-e9a9096565a9 / ext4 defaults 1 1
UUID=a4623924-f98a-47c9-a9e7-38c06e0fc7f6 /boot ext4 defaults 1 2
UUID=04777095-5e99-46d5-87cf-1bc6665635ee swap swap defaults 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@