sed:stream Editor流编辑器,默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕。 语法:

	sed [option] 'AddressCommand' file1 file2...

option选项有:

	-n :静默模式,不再显示模式空间的内容
	-i :直接修改源文件
	-r :使用扩展正则表达式

Address常用的匹配范围:

	1、startLine,endLine
			如:1,100 表示从第一行到100行,$表示最后一行
	2、/RegEXP/ 正则匹配,将匹配到的行显示出来
			如:/root/ 将匹配到有root的行显示
	3、/pattern1/,/pattern2/,从第一次匹配到pattern1开始到匹配到pattern2的行结束的中间的行
	4、LineNumber匹配指定的行
	5、startLine,+N,从startLine开始,往后的N行

command常用命令

	d:删除匹配到的行
	p:显示符合条件的行
	a \string :在匹配当的行后面追加string的内容
	i \string :	在匹配当的行前面添加string的内容
	r file :将file文件的内容添加到匹配到的行出
	w file :将匹配到的行添加到file文件中
	s/pattern/string/修饰符 :将匹配到的pattern替换成string,默认是替换第一个被匹配到的
					常用的修饰符有:
							i :忽略大小写
							g :全局替换

如: 1、删除/etc/grub.conf文件中行首的空白符;

	sed -r 's@^[[:spapce:]]+@@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 -r 's@^#@@g' /etc/inittab

5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;

	sed -r 's@^#[[:space:]]+@@g' /etc/inittab

6、删除某文件中以空白字符开头后面跟#类的行中的开头的空白字符及#号

	sed -r 's@^[[:space:]]+#@@g' /etc/inittab

7、取出一个文件路径的目录名称;如取出/etc/inittab文件的目录,即/etc

	##echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'	
	
	echo '/etc/inittab' | sed -r 's#^(/.*)/(.*)#\1#'

基名/文件名:

	echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'
	
	echo '/etc/inittab' | sed -r 's#^(/.*)/(.*)#\2#'

需要注意的是,如果要替换原文见的内容要加 -i 参数,sed 中的///,可以使用###或@@@等字符代替。 p的 command参数也要注意下,匹配到的行将会显示两次,没匹配到的显示一次,如果显示两次的,第一次是 p的的作用将匹配到的行打印出来,第二次是sed命令的作用,会将模式空间的内容显示出来,所以说没匹配到的也会显示一次,如果想只显示一次可以加 -n 参数,那么sed命令中模式空间的内容不显示。