1. 简介 sed是一种在线编辑器、行编辑器,一次处理一行内容,在处理时,把当前的行存储到临时缓冲区中,该缓冲区称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出;然后紧接着去处理下一行,重复完成相同的操作,直至文件末尾;sed处理的整个过程中,对象文件中的内容并没有改变,除非使用重定向来存储处理后的结果。sed主要用来自动编辑一个或多个文件,简化文件的反复操作过程。 流程如下图: 2. sed命令功能 sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  • 常用选项:
-n:表示不输出模式空间中内容至屏幕
   -e script1 -e script2 -e script3:多点编辑
   -f /path/to/script_file:从指定的文件中读取脚本并运行
   -i:直接修改源文件
   -r:支持扩展正则表达式
  • script:地址定界 编辑命令 1.地址定界 (1)空地址:对全文进行处理 (2)单地址: #:指定行 /pattern/:指此模式所匹配到每一行 (3)地址范围: #,#:表示数字,指定行 $:最后一行 #,/regexp/:从#开始,到第一次被/regrexp/所匹配到的行结束,中间的所有行 /regexp1/,/regexp2/:从第一次被/regexp1/所匹配到的行开始,到第一次被/regexp2/匹配到的行结束,中间所有的行 (4)步进: 1~2:所有奇数行 2~2:所有偶数行 2.编辑命令: d:删除模式空间的行 p:显示模式空间的内容 a\text:在行后面追加文本,支持使用\n实现多行追加 i \text:在行前面插入文本,支持使用\n实现多行插入 c\text:用text替换匹配到的行 w /path/to/somefile:把指定内容另存至/path/to/somefile路径所指定的文件中 r /path/tp/somefile:在文件的指定位置插入另一个文件的所有内容,完成文件合并 s/regexp/replacement/:替换由regexp所匹配到内容为replacement (支持使用其他分隔符如s@@@,s###;条件是该分隔符在后面的模式中 没有出现过),对于替换还有2个后选项g和i,分别表示如下: g:全局替换 i:不区分大小写 ** 3.常用命令功能演示:**
    (1)显示/etc/fstab第3行内容:
           ` sed -n '3p' /etc/fstab`
    	(2)显示/etc/fstab第3至6行内容:
    	     ` sed -n '3,6p' /etc/fstab`
    	(3)显示/etc/fstab奇数行内容:
    	     `sed -n '1~2p' /etc/fstab`
    	(4)显示/etc/fstab的最后一行
    	   ` sed  -n '$p' /etc/fstab`
    	(5)删除/boot/grub2/grub.cfg文件中所有行的行首的空白字符
    	  ` sed 's/^[[:space:]]\+//g'  /boot/grub2/grub.cfg`
    	 (6)删除/boot/grub2/grub.cfg文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符:
    	` sed 's/^#[[:space:]]\+//g' /boot/grub2/grub.cfg`
    	(7)把/tmp/grub.cfg的文件的奇数行另存为/tmp/grub.cfg3
    	` sed '1~2w /tmp/grub.cfg3' /tmp/grub.cfg` 
    	 (8)echo一个文件路径取出其基名,进一步取出其路径名
    	    如:取出路径名:`echo "/etc/sysconfig/network-scripts/" | sed  -r  's@[^/]+/?$@@'`
    			     取出基名:`echo "/etc/sysconfig/network-scripts/" | sed   's@^.*/\([^/]\+\)/\?$@\1@'`
    
**4.sed的高级用法**
       sed除了模式空间(pattern space)还有一个"hold space"的内存空间,称之为保持空间
			 高级编辑命令:
			 h:用模式空间中的覆盖保持空间的内容
			 H:把模式空间中的内容追加至保持空间中的内容的后面
			 g:从保持空间的取到的内容,并将其覆盖模式空间中的内容
			 G:从保持空间中取到的内容,并将其追加在模式空间中的内容的后面
			 x:把保持空间和模式的内容进行互换
			 n:读取匹配到的行的下一行至模式空间,(会覆盖模式空间中的原有内容)
			 N:读取匹配到的下一行至模式空间,追加在模式空间中原有内容的后面
			 d:删除模式空间的内容
			 D:删除多行模式空间中的首行
	     注意:命令功能可使用!取反,分号可用于分隔脚本
			 示例:
			     ```
              sed -n 'n;p' FILE:显示偶数行
			    sed '1!G;h;$!d' FILE:逆序显示文件
			    sed '$!d' FILE:取出最后一行
			    sed '$!N,$!D' FILE:显示最后两行
			    sed '/^$/d;G' FILE:保证指定的文件每一行后有且仅有一个空白行
			    sed 'n;d' FILE:显示奇数行
			    sed 'G':在文件中的每行都加空白行