sed是stream editor缩写,表示流编辑器,它是一款文本处理工具,可以配合正则表达式进行文本替换。
1、使用正则表达式匹配并进行文本中的字符串替换
*使用-i选项可以直接将替换结果应用到源文件而不用重定向到其他新文本。
*sed 's/pattern/replace_string/' file.txt会将文本中第一次出现的pattern替换为replace_string。若要对全文本应用次替换,需要在命令尾部加上g参数,即sed 's/pattern/replace_string/g' file.txt,若要从第N次开始替换,可以使用Ng即为,即sed 's/pattern/replace_string/Ng' file.txt。如:
  1. [root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/4g'
  2. patternpatternpatternPATTERN
  3. [root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/3g'
  4. patternpatternPATTERNPATTERN
  5. [root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/2g'
  6. patternPATTERNPATTERNPATTERN
  7. [root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/g'
  8. PATTERNPATTERNPATTERNPATTERN

*字符/在sed中作为定界符使用,但是我们可以使用任意的定界符(如果所使用的定界符出现在所要匹配的样式内部,则需要用\进行转义),如下:

  1. [root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's#pattern#PATTERN#g'
  2. PATTERNPATTERNPATTERNPATTERN
  3. [root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's*pattern*PATTERN*g'
  4. PATTERNPATTERNPATTERNPATTERN
  5. [root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's^pattern^PATTERN^g'
  6. PATTERNPATTERNPATTERNPATTERN
2、常用技巧:
#移除空白行:sed '/^$/d' file.txt (/pattern/d会移除匹配样式的行,在空白行中,行尾标记紧随着行首标记)
  1. [root@CentOS-6 testdir]# cat test
  2. max
  3. maxtrix
  4. 010-12345678
  5.  
  6. IPADDR: 192.168.0.1
  7. 0.0.0.0
  8. [root@CentOS-6 testdir]# sed '/^$/d' test
  9. max
  10. maxtrix
  11. 010-12345678
  12. IPADDR: 192.168.0.1
  13. 0.0.0.0
  14. [root@CentOS-6 testdir]#

#已匹配字符串标记&:在sed中,用&标记被匹配的字符串,可在替换字符串时使用:

  1. [root@CentOS-6 testdir]# echo "this is test" | sed 's/\w\+/[&]/g'
  2. [this] [is] [test]

#子串匹配标记\1、\2等:&代表匹配给定样式的字符串,但是sed可以匹配给定样式的其中一部分,如:

  1. [root@CentOS-6 testdir]# echo "hao ni" | sed 's/\([a-z]\+\) \([a-z]\+\)/\2 \1/'
  2. ni hao
  3. [root@CentOS-6 testdir]# echo "I am number 7" | sed 's/number \([0-9]\)/\1/'
  4. I am 7

第一个例子中,使用相同的样式分别匹配了hao(子串1,表示为\1)和ni(子串2,表示为\2),在替换的时候两个匹配的子串调换位置,所以结果为“ni hao”,第二个例子中。number [0-9]匹配了number 7,其中7为匹配字符串,是第一个子串,替换中为\1即将number 7替换为第一个子串

#组合多个表达式:多个替换可以用管道符来处理,也可以在同一个sed命令中用“;”分隔,如下:

  1. [root@CentOS-6 testdir]# echo "nice too meet you" | sed 's/n/N/' | sed 's/too/to/'
  2. Nice to meet you
  3. [root@CentOS-6 testdir]# echo "nice too meet you" | sed 's/n/N/;s/too/to/'
  4. Nice to meet you

#引用:sed表达式通常用单引号来引用,不过也可以使用双引号。双引号会通过对表达式求值来进行扩展。当我们想在表达式中使用一些变量字符串时,双引号就有用武之地了:

  1. [root@CentOS-6 testdir]# ojb=LYNUX
  2. [root@CentOS-6 testdir]# echo "hello lynux" | sed "s/lynux/$obj/"
  3. hello LYNUX

sed笔记的更多相关文章

  1. sed 笔记

    sed是一个非交互式文本编辑器,他可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘,文件重定向,字符串,变量甚至来自于管道的文本.sed适用于以下三种场合: 编辑相对交互式文本编辑器而言太大的 ...

  2. shell编程sed笔记

    源文件的内容 <modules> <module name="provider"> <!--发布模式--> <bds_mode/> ...

  3. 【Linux】sed笔记

     sed - stream editor for filtering and transforming text(用于过滤和转换文本的SED流编辑器),主要是以行为单位进行处理,可以将数据行进行替换. ...

  4. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  5. Sed&awk笔记之sed篇

    http://blog.csdn.net/a81895898/article/details/8482387 Sed是什么 <sed and awk>一书中(1.2 A Stream Ed ...

  6. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  7. Sed&awk笔记之sed篇(转)

    Sed是什么 <sed and awk>一书中(1.2 A Stream Editor)是这样解释的: Sed is a "non-interactive" strea ...

  8. sed、grep、awk -- 三剑客笔记记录

    sed常用操作笔记   1.删除文件最后一行: sed -i '$d' filename 2.递归替换内容:sed -i 's/内容A/内容B/g' filename sed -i "s/S ...

  9. Linux sed 使用笔记

    sed 工具使用笔记 Linux中经常需要对一些超大的文本文件进行操作,例如 GB 级别的 CSV.TXT.LOG 文件,如果使用 vi 或者 vim 编辑器操作会非常慢且卡,此时 sed 工具或许可 ...

随机推荐

  1. CLASSIC VS INTERGRATED IN IIS 7.0

    Classic mode (the only mode in IIS6 and below) is a mode where IIS only works with ISAPI extensions ...

  2. (转)IC验证概述

    验证是确保设计和预定的设计期望一致的过程,设计期望通常是通过设计规范来定义的.对于芯片设计,在不同的阶段可以分为:寄存器传输级(RTL)的功能验证.门级的仿真验证.形式验证以及时序验证.我们通常所说的 ...

  3. C6000系类的内联函数

    1.求绝对值函数 (1) _abs()  C代码  : int _abs(int src)  汇编: ABS  功能: 求32位数据的绝对值   (2) _labs()  C代码: int _labs ...

  4. python画图—黑板客老师课程学习

    1.介绍 把每个图都看作一个对象,图中的每一个部分也是对象.——所有的一切都是对象. 工具——ipython notebook 是python里边用的最多的2D&3D的会图库,开源免费库,使用 ...

  5. PO、VO、BO、DTO、POJO、DAO

    J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了(听过老罗对这种现象的批判的朋 ...

  6. Ruby-模块和类

    首先看下他们的关系 irb(main):100:0> String.class => Class irb(main):101:0> String.class.superclass  ...

  7. CentOS6.5 vsftpd 配置

    CentOS6.5vsftpd 配置文件为/etc/vsftpd/vsftpd.conf 安装完软件后:1.默认匿名用户能够登陆,且限制在/pub目录内,2.本地用户可以登陆但因SElinux而无法登 ...

  8. Windows 程序设计

    一.Win32 API /******************************************************************** created: 2014/04/1 ...

  9. (引用)Python 生成随机数小结

    转载:http://blog.csdn.net/shuaijiasanshao/article/details/51339438

  10. pod导入融云路径报错解决办法

    build Settings中搜索sear Search Patchs下点开Library Search Paths 将$(inherited)"$(SRCROOT)/Pods"分 ...