sed命令初步使用
sed 初步使用
把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),
接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。而源文件不会改变除非使用
输出重定向。
格式:
sed[options] "script" FILE....
[options]:
-n:静默模式,不输出模式空间内的内容;不加 -n 默认打印模式空间的内容
-r:扩展的正则表达式
-f 文件:指定sed脚本文件
-e 'script' -e 'script' :指定多个编辑指令
-i : 直接编辑原文件
“script”
编辑命令:
d:删除
p: 打印
i \:在被指定到的行前面插入文本
a \:在被指定的行的下面插入文本
\n:换行
r 文件:在指定位置把另外一个文件的内容插入
w 文件:将符合条件的所有行保存至指定文件中
=:显示符号条件的行的行号
s///:查找条件可以使用模式,但是要替换的内容不行
地址定界:自定义的起始行到结束行
startline,endline
1,3
/pat1/,/pat2/
/pattern/
修饰符:
g:global,全局替换
i:ignore-case,不区分字符大小写
练习:
1)替换/etc/inittab文件中”id:3:initdefault:"一行中的数字为5
sed 's@\(id:\)[0-9]\(:initdefault\)@\1 5\2' /etc/inittab
2)删除/etc/init.d/funcions文件中的空白行
sed "/^$/d" /etc/init.d/funcions
3)删除/etc/inittab文件中位于行首的#;
sed 's@^#@@g' /etc/inittab
4)删除/etc/rc.d/rc.sysinit文件中以#后跟至少一个空白字符开头的行的行首的#和空白字符。即去掉某些备用选项的#
sed "s@^#[[:space:]]\{1,\}\@@g" /etc/rc.d/rc.sysinit
5)删除/boot/grub/grub.conf文件中行首的空白字符。
sed "s@^[[:space:]]\{1,\}@@g" /boot/grub/grub.conf
6)取出一个文件路径的目录名称,如/etc/sysconfig/network,其目录为/etc/sysconfig,功能类似dirname命令;
echo /etc/sysconfig/network | sed "s%[^/]\{1,\}/\?$%%"