sed:stream editor:流编辑器
是一种文本编辑器:
一次读一行,读到自己专用的“模式空间(pattern space)”中
在模式空间中对文本进行处理,
如果符合模式,则执行编辑操作,否则不执行操作。无论处理与否,都输出到屏幕
支持正则表达式
-r支持扩展正则
-n静默模式:不输出,只编辑
-e script1 –e script2 –e script3多点编辑
-f 从配置文件中读取脚本,然后按脚本执行
-i 直接修改源文件;默认是不修改源文件的
地指定界:
#:指定行
$:最后一行
/regexp/:能够被regexp所匹配的行
\%regexp%:同上
/regexp/| \%regexp%忽略字符大小写
开始行,结束行
#, /regexp/:从#开始,披到到/regexp/结束
#,#1:#开始,#1结束
/regexp1/,/regexp2/,从匹配1开始到匹配2结束
#,+n:#开始,匹配之后的n行
first~step:first开始,step步进
d:删除 sed ‘1,4d’删除
=显示行号
a:追加行 append
i:插入 insert
c:替换change
p:打印模式空间中的行
s/regexp/replace/用后面替换前面,可以使用后向引用
g:全局替换
i:不区分大小写
w:另存到其他文件
r:插入另一个文件,完成文件合并
练习:
1、删除/boot/grub/grub.conf文件中所有行首的空白字符
我在centos7上没找到这个文件,找到了/boot/grub2/grub.cfg,删除了里面的行首#
2、删除/etc/fstab文件中所有#开头,后至少跟一个空白字符的行的行首的#和空白字符
3、把/etc/fstab文件的奇数行另存为/tmp/fstab.3
4、echo一个文件路径给sed命令,取出其基名,进一步取出其路径名
还没想出来
保持空间,hold space
保存模式空间中的内容
h:用模式空间内容覆盖保持空间内容
H:用模式空间内容追加保持空间内容
g:从保持空间中取1行内容覆盖到模式空间
G:从保持空间取呢容追加模式空间
x:交换内容
n:读取匹配行下一行,覆盖保持空间
N:读取匹配行,追加保持空间
d:删除模式空间的内容
D:删除多行模式空间中的首行
以上内容都可以!取反
sed ‘G’ /etc/fstab,在每一行后面添加空白行
sed ‘$!d’ /etc/fstab 保留最后一行
sed ‘/^$/d;G’ /etc/issue,保证指定文件的每一行后面有且只有一个空白行
sed ‘n!d’ /etc/issue,保留奇数行
sed –n ‘1!G;h;$p’ /etc/issue 倒序!
原文地址:http://korekara.blog.51cto.com/8206017/1696594