行编辑器
默认不编辑原文件仅对模式间的数据进行处理,处理结束后将模式空间打印至屏幕
sed ・address+command・ file ….
-i:直接修改原文件
-n:不再默认显示模式空间中的内容
-e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SCRIPT:
-r:使用扩展正则表达式
Address
1 startline,endline
比如1.100
$:最后一行
2/RegExp/
/^root/
3/pattern1/,/pattern2/
第一次被pattern1匹配到的行开始至第一次被pattern2匹配到的行结束,这中间所有的行
4linenumber
指定的行
5startline,+N
从startline开始向后的N行
Command
d:删除符合条件的行
p:显示符合条件的行
a \string:在指定的行后面追加新行,内容为string
I \string:在指定的行前面追加新行,内容为string
r FILE:将指定的文件的内容添加至符合条件的行处
w FILE:将指定的文件内容存之指定的文件中
s /pattern/string/修饰符:查找并替换,默认只替换第一次被匹配到的字符串
g:全局替换
i:忽略大小写
&:引用模式匹配
练习
1删除/etc/grub.conf文件中行首的空白符
sed �Cr `s@^[[ : space: ]] +@@g` /etc/grub.conf
2替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5
sed `s@\(id:\) [0-9]\(:initdefault:\)@\15\2@g` /etc/inittab
3删除/etc/inittab文件中的空白
sed `/^$/d` /etc/inittab
4删除/etc/inittab文件中开头的#号
sed `s@^#@@g` /etc/inittab
5删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符
sed �Cr `s@^#[[ : space: ]]+@@g` /etc/inittab
6删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#
sed �Cr `s@^[[ :space: ]]+#@@g` /etc/inittab
7取出一个文件路径的目录名称
echo “/etc/rc.d” | sed �Cr `s@^(/.*/) [^/]+/?@\1@g`
取出基名
echo “/etc/rc.d” | sed �Cr `s@^/.*/ ([^/]+)/?@\1@g`