sed的用法

原创 2012年03月26日 13:25:01

今天遇到sed的相关用法,再次对sed的用法进行总结;


1. 替换命令

    sed 's/{old_value/{new_value}/}'

    实现使用new_value替换old_value的操作;例如

    echo it is not your fault | sed 's/fault/problem/'

    it is not your prolbem


    多个修改替换,可以采用-e的方式,也可以使用;多次隔开。例如

    第一种方式:echo it is not your fault | sed -e 's/your/my/' -e 's/fault/problem/'

    第二种方式:echo it is not your fault | sed 's/your/my/ ; s/fault/problem/'

    两条语句的效果是一样的,输出都是:

    it is not my problem

    第三种方式:sed后加一个撇号,然后回车,可以采用多行输入的方式.

  

    全局修改

    sed命令类似于替换命令,每次都处理每行中第一个出现的选定序列,要实现全局的修改,需要使用下面的格式

    sed 's/{old_value}/{new_value}/g'


   匹配替换

   sed命令可以实现特定匹配字段的字符替换,例如

   sed '/your/ s/fault/problem'将your后面的fault改成为problem。

   需要注意的一点:sed执行替换命令是每行单独执行的,它处理过程以行为单位,如果在某一行找到匹配内容,那么将从改行的第一处进行替换修改,加入/g也是在改行的所有的位置进行修改。。如果在改行中没有找到前面的匹配字段,则不进行修改。例如file

    it is not your fault, but my fault

    it is not my fault, but his fault

    fault is not the reason

    在上面的文档中,如果采用 sed '/your/ s/fault/problem/' file 那么只有在第一行找到相关的your匹配字段,那么修改第一个fault为problem,似乎执行正确。

    但是,如果采用 sed '/my/fault/ s/fault/problem/' file 那么在前两行都可以匹配到my,那么就会替换前两行中第一次出现fault的地方为problem,输出为:

    it is not your problem, but my fault

    it is not my problem, but his fault

    fault is not the reason

    同样的,如果加/g,那么也只是在当前行的所有值替换,因此需要谨慎使用。

    还需要注意的就是,这里只是改变了显示,想要保存到指定文档中,需要重定向。

 

   源文件/脚本文件

   sed -f script-file file

   sed命令可以使用脚本文件,-f后面可以为相应的脚本文件,值得注意的是,脚本文件中不使用撇号

  

  限制行

  编辑器默认查看输入到流编辑器中的每一行,且默认在输入到流编辑器中的每一行上进行编辑。这可以通过在发出命令之前指定约束条件来进行修改。例如

  sed '3,4 s/fault/problem/' file 默认将第三行和第四行的fault值进行替换


  禁止显示

  "-n" 覆盖了所有的显示,并且不显示任何一行,而无论它们是否被编辑操作修改。


2.删除行

   sed '{what to find} d'

   删除相应的行,这里由what to find限制到某一特定行

  上三角号 (^) 表示一行的开始

  美元符号 ($) 代表文件的结尾,或一行的结尾

 

  sed '/fault/ d ' file

  删除file中包含fault的行

  sed '/fault/ !d' file

 删除file中包含fault之外的所有行

  sed '/^$/ d' {filename}

  删除文件中的所有空白行

  sed ‘1,/^$/ d’ {filename}

  删除文件中第一行到第一个空行


3.插入/添加/写到文件

  sed '3i *****'  从第三行插入

  sed '3a*****'  从第三行添加

  sed ‘×××××× 1,3w new_file’ 重新将第一行到第三行写到新文件中


4.修改

sed '/file/ c **************'

修改这里是指,将匹配到的整行进行修改,将原来的整行修改为新的内容,只要匹配,整行进行替换



 

^: 表示句首. 如 ^abc 表示以 abc 为首的句子.
$: 表示句尾. 如 abc$ 表示以 abc 结尾的句子.
\<: 表示词首. 如 \<abc 表示以 abc 为首的詞.

\>: 表示词尾. 如 abc\> 表示以 abc 結尾的詞.


本文主要参考:

http://flierlh.iteye.com/blog/132809

http://fangfang0717.blog.51cto.com/236466/130525/

sed基本用法简介

sed是stream editor, 也就是流编辑器, 实际上就是linux中的一个命令, 作用很强大。 搞linux开发的人, 不能不熟悉该命令, 否则, 何以立足于江湖呢? 在本文中, 我们来一起...
  • stpeace
  • stpeace
  • 2015年07月07日 00:02
  • 3649

shell学习之-sed用法解析

 通过例子学习sed的用法1,sed介绍    sed可删除(delete)、改变(change)、添加(append)、插入(insert)、合、交换文件中的资料行,或读入其它档的资料到文>件中,也...
  • zg_hover
  • zg_hover
  • 2007年09月28日 10:31
  • 50532

sed r命令使用

sed中的r命令会把其后面的任何字符判读为文件名,直到回车符或是单引号,一般对r命令的写法有下面的几种:sed /pattern/{r file1other cmd} file  # 因为这里里面使用...
  • imfinger
  • imfinger
  • 2011年06月13日 01:22
  • 4155

sed常见用法总结

编辑文本  sed -i '1i xyz' test.txt 在第一行之前 sed -i '1a xyz' test.txt  在第一行之后插入 sed -i '1c xyz' test.txt  把...
  • u011750989
  • u011750989
  • 2014年09月02日 20:00
  • 2317

shell脚本学习笔记 (sed的高级用法----模式空间和保持空间)

前段时间在学习shell脚本,上次有提到sed的模式空间和保持空间概念,但是一直没有研究好,这两天研究了一下,所以将它发出来,不是很全面,仅仅供大家参考一下。      保持空间sed在正常情况下,将...
  • zr1076311296
  • zr1076311296
  • 2016年04月29日 00:04
  • 4731

sed高级用法:模式空间(pattern space)和保持空间(hold space)

环境:centos 6.4  sed版本:sed-4.2.1-10.el6.x86_64 前面的基本用法已经可以满足90%的需要,人个认为想要真正掌握sed,还需要学习一下sed的高级用法...
  • ITsenlin
  • ITsenlin
  • 2014年03月13日 00:54
  • 10433

sed N与n 用法说明

echo -e "1\n2\n3\n4"的结果是: 1 2 3 4 echo -e "1\n2\n3\n4" | sed -n 'N;s/\n/ /;p' sed先读入第一行到patt...
  • lianliange85
  • lianliange85
  • 2015年01月14日 23:41
  • 440

sed中y命令与s命令的区别

首先这两个命令都可以用作替换,但替换时还是有区别的 (1)y一般是行级别的替换,s一般是列级别替换(当然也可以转换成行级); (2)s替换的是整体,y替换的是每一字母对应的单个字母 ...
  • drbing
  • drbing
  • 2016年09月07日 23:13
  • 1894

Linux中sed命令用法

关于用法在这里 http://www.jb51.net/LINUXjishu/144593.html 全文如下 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存...
  • a130098300
  • a130098300
  • 2017年02月07日 17:08
  • 2087

sed -i 命令使用

:::命令详解:::: sed -i 's/SYNC_HWCLOCK=no/SYNC_HWCLOCK=yes/g' /etc/sysconfig/ntpdate sed -i 's/原字符串/新字...
  • u010452908
  • u010452908
  • 2017年12月15日 18:11
  • 70
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sed的用法
举报原因:
原因补充:

(最多只允许输入30个字)