sed命令详解

      sed命令是流式编辑器(Stream EDitor)或行编辑器,工作在模式空间(pattern space),不操作源文件,只是把处理结果返回到屏幕上来,对源文件没有任何损害,sed命令默认支持正则表达式,也可以使用sed -r选项支持扩展正则表达式;

一、sed 的使用格式:

     sed [options] ‘script’ input_file...

              script指的是sed的脚本,input_file是被处理的文件;

     sed [options] -f script_file input_file...

             -f用来指定一个文件script_file(脚本文件);

     sed ‘ADDR1,ADDR2command’ input_file 对ADDR1行和ADDR2行之间的行进行处理,第一行从序号1开始,美元符号($)表示最后一行;如果第一行写成0,这个命令执行看起来像是sed失效了。

     sed ‘/PATTERN/command’ input_file (PATTERN指的是模式(正则表达式),只有模式

             匹配到的行才执行命令;
     sed ‘/PATTERN1/,/PATTERN2/command’ input_file 表示从包含PATTERN1的第一行

             开始到包含PATTERN2第一行结尾;

二、sed 选项:

     sed -i 直接操作源文件;

     sed -n 静默模式,表示只显示处理以后的内容;

     sed -r 使用扩展正则表达式;

     sed -e 多点编辑,执行多个脚本,可以使用多个-e选项,或者使用一个-e选

             项,后面的脚本用分号隔开;

三、sed 的子命令:

     d 删除指定行,准确地描述为:删除当前模式空间内容(不再传至标准输出),并放弃之后的命令,并对新读取的内容,重头执行sed

     D 删除模式空间内第一个 newline 字母 \n 前的资料,准确地描述是:删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed

     p 模式空间中的文本在处理之前,每一次都会先显示;

     ! 对所选行以外的所有行应用命令

     a \ 在模式匹配到的行后面添加新内容;

     i \ 在模式匹配到的行前面添加新内容;

     c \ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用 "\" 续行;

     r FILE 读取FILE文件并且把FILE文件添加到某个文件中的某个特定位置;

     w FILE 把FILE文件中模式能够匹配到的所有的行保存到另一个文件中;

     y /string1/string2/ 把string1替换成string2;

     s /patren/string/表示把patren匹配出来的内容替换为string(其中的“/”

         有其特殊含义,所以使用时要注意转意,实际上可以替换为其它的无特殊

         意义的字符,下面举例我们将用@符号替换);      
       g 全局的,找到所有的匹配字符,如果不加的话只匹配第一次出现的内
容;
       i 做模式匹配忽略大小写;
       & 引用其前面的所有字符;
     n 将模式空间拷贝于标准输出。用输入的下一行替换模式空间。
     N 追加到下一行,sed命令每次读取一行,当第一行读取后会放到模式空间中 

       不处理然后接着读取第二行,读取完后将这两行一块处理,往下以此类推;

     h 将模式空间的内容以覆盖的方式复制到保留空间;
     H 将模式空间的内容以追加的方式复制到保留空间;
     g 将保留空间的内容以覆盖的方式复制到模式空间;
     G 将保留空间的内容以追加的方式复制到模式空间;
     b 跳转,略过符合模式的行;
     b label :label字符的长度不能超过7个;跳转到什么位置,其中的label是固

       定字符;

     x 保留空间和模式空间对调;

     t label 测试:前面的s命令执行成功了就跳转到标记位置;

     = 为每一行标记行号;

     q 结束或退出sed

四、下面来详细讲解一下常用的命令或选项的用法及示例

d删除指定行;


sed -i 选项会直接操作源文件,一定要慎用;
 
! 对命令取反,仍以fstab文件为例:
模式空间中的文本在处理之前,每一次都会先显示,也就是说每一行将会被显示
   两次,以fstab文件为例:
sed  -n 选项为静默模式,表示只显示处理以后的内容,处理以前的内容将不会被
    显示出来;仍以fstab文件为例;

sed ‘/PARTTERN/command’input_file (PARTTERN指的是模式,只有模式匹
   配 到的行才执行命令,其中的模式同时支持grep的各种元字符;这里以脚本a.sh
   为 例,删除以#开头的行:

i \  在模式匹配到的行前面添加新内容,与a \正好是相反的结果;

a \  在模式匹配到的行后面添加新内容;这里以脚本a.sh为例,在以包含#号的行
     的后面添加一些内容:

同时也可以利用\n实现添加多行,仍以a.sh为例,我们在上述的基础上再在后面添加一行内容:

r FILE 读取FILE文件并且把FILE文件添加到某个文件中的某个特定位置;这里以
        fstab和a.sh脚本文件为例,将fstab文件里的内容添加到a.sh脚本文件中
        的第二行后面:

w FILE 把FILE文件中模式能够匹配到的所有的行保存到另一个文件中;
   示例: 把a.sh脚本文件中包含大写字母的行保存到/tmp/file.out这个文件中,
         注意w命 执行时也会将模式空间中的文本在处理之前,每一次都会先显
         示,所以执行时 我们加上sed的-n选
s  /patren/string/ 表示把patren匹配出来的内容替换为string(其中的“/”有
   其 特殊含义,所以使用时要注意转意,实际上可以替换为其它的无特殊意义 的
   字 符,下面举例我们将用@符号替换);
      g  全局的,找到所有的匹配字符,如果不加的话只匹配第一次出现的内容;
     i 做模式匹配忽略大小写; 
     & 引用其前面的所有字符;
     n 下一行;模式空间中的文本在处理之前,每一次都会先显示;
示例:以test1文本文件为例,我们查找文本中的每一行末尾的love、like,然后将它们替换成lover和liker:
 
查找文本中的每一行中的love,然后将它替换成lover;
查找文本中所有的love和like,并将它们替换成lover和liker:
查找文本中his、her并将它们替换成His、Her:
sed -e 多点编辑,执行多个脚本,多点编辑,执行多个脚本,可以使用多个-e选
    项,或者使 用一个-e选项,后面的脚本用分号隔开;仍以test1为例,查找文本
    中的每一行末尾的 love、like,然后将它们替换成lover和liker,同时查找文
    本中his、her并将它们替换成 His、Her:
N 追加到下一行,sed命令每次读取一行,当第一行读取后会放到模式空间中不处理
  然后接着读 取第二行,读取完后将这两行一块处理,往下以此类推;
 
h将模式空间的内容以覆盖的方式复制到保留空间;
H 将模式空间的内容以追加的方式复制到保留空间;
g 将保留空间的内容以覆盖的方式复制到模式空间;
G 将保留空间的内容以追加的方式复制到模式空间;
   注:保留空间默认是空的,即相当于空白行;


b 跳转,略过符合模式的行;
b label :label 字符的长度不能超过7个;跳转到什么位置,其中的label是固定
  符;
y  /string1/string2/ 把string1替换成string2;





文档最后添加一行
sed -i '$a要插入的文字' file.txt

、总结:

    以上就是sed命令一些用法以及其常用选项、子命令的详细解析,讲解过程几乎完全基于作者记忆和个人理解进行,限于作者的经验和理解能力等,疏漏或错误在所难免,朋友们如对课程中内容的讲解有建议或者意见,欢迎给出指点和建议。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值