一、简介

sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。
默认情况下,所有的输出行都被打印到屏幕上。

sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。
具体过程如下:
    首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。
    sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。
    处理完输入文件的最后一行后,sed便结束运行。
    sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

二、命令用法

  • 命令使用格式:
sed [OPTION]... 'script' [input-file]...

sed [常用选项] '[地址定界] [编辑命令]' [input-file]
 
  • 常用选项:
-n :不输出模式中的内容至屏幕

-e script:可以指定一个sed命令中指定编辑多个脚本或多个编辑命令,也称为多点编辑;

-f /PATH/TO/SCRIPT_FILE :从指定文件中读取编辑脚本

-r :支持使用扩展正则表达式

-i :直接编辑源文件
  • 地址定界
1、不给地址:对全文进行处理

2、单地址
 	# :指定的行
 	/pattern/: 被此模式所能匹配到的每一行
 	
3、地址范围
	#,#  :从几行到几行
	#,+# :从当前开始,向下总共#行
	#,/pat1/:从指定行 到匹配行
	/pat1/,/pat2/:从匹配的行1 到 匹配的行2

4、步进:~
	1~2 :所有奇数行
	2~2 :所有偶数行
  • 编辑命令
   d:删除(删除模式空间中的内容);建议不要于-n使用
   
   p:显示模式空间中的内容;
   
   a \text:在行后追加文本"text",支持使用\n实现多行追加
   
   i \text:在行前插入文本"text",支持使用\n实现多行追加;
   
   c \text:把匹配到的行替换为此处指定的文本"text";
   
   w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定文本中;
   
   r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行处后面;文件合并
   
   =:为模式匹配到的行打印行号
   
   !:条件取反;
      地址定界!编辑命令;
      
   s///:查找替换,其分隔符号可自行指定,常用的有:s@@@, s###等
      替换标记:
         g:全局替换;
         w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
         p:显示替换成功的行;

  • 高级编辑命令
    h:把模式空间中的内容覆盖至保持空间中

    H:把模式空间中的内容追加至保持空间中

    g:从保持空间取出数据覆盖至模式空间

    G:从保持空间取出内容追加至模式空间

    x:把模式空间中的内容与保持空间中的内容进行互换

    n:读取匹配到的行的下一行至模式空间

    N:追加匹配到的行的下一行至模式空间

    d:删除模式空间中的行

    D:删除多行模式空间中的所有行   
           

三、使用示例

## 将/etc/fstab文件中的1-5行进行删除
	sed '1,5d' /etc/fstab
	
## 显示奇数行
	sed -n '1~2p' /etc/fstab

## /etc/fstab第三行的前面插入一个"# My-Insert"的信息;然后在该行后面插入该信息
	sed '3i \# My-Insert' /etc/fstab
	sed '3a \# My-Insert' /etc/fstab

## 删除所有注释行
	sed  '/^#/d' fstab

## 删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符
	sed 's/^[[:space:]]\+//' /boot/grub/grub.conf

## 删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
	 sed 's/^#[[:space:]]\+//' /etc/fstab

## echo 一个绝对路径给sed命令,取出其基名,取出其目录名
	echo "/etc/sysconfig/"|sed 's/[^/]\+\/\?$//'
	
## 查询某个时间段的日志
##  sed-n '/开始时间/,/结束时间/p'日志文件
	sed -n '/2019-04-08 17:00:02/,/2019-04-08 23:59:36/p' file.log
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐