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。如:
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/4g'
patternpatternpatternPATTERN
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/3g'
patternpatternPATTERNPATTERN
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/2g'
patternPATTERNPATTERNPATTERN
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/g'
PATTERNPATTERNPATTERNPATTERN

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

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

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

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

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

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

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

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

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

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

[root@CentOS-6 testdir]# ojb=LYNUX
[root@CentOS-6 testdir]# echo "hello lynux" | sed "s/lynux/$obj/"
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. C#字符串(截取)

    1.按照逗号进行截取,并存放在一个数组中 eq:截取字符串,并放在数组中:string[] strArray = strPaths.Split(','); 获取某一个值 string s1=strAr ...

  2. Rsa加解密Java、C#、php通用代码 密钥转换工具

    之前发了一篇"TripleDes的加解密Java.C#.php通用代码",后面又有项目用到了Rsa加解密,还是在不同系统之间进行交互,Rsa在不同语言的密钥格式不一样,所以过程中主 ...

  3. gfw列表

    https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

  4. html信息提示框

    1.span <span title="提示信息" data-container="body" data-toggle="inf" d ...

  5. jmeter性能测试小小的实战

    项目描述: 被测网站:xqtesting.blog.51cto.com 指标:响应时间以及错误率 场景: 新建 一个线程组,设置线程属性: 线程数为10 Ramp-Up-Penod(in second ...

  6. 记录下最近项目中常用到的SQL语句

    1  实现对字符串的Spilt功能. 比如查出“I have a dream!”总共有几个单词,需要以' '分割,然后再求出总数. ALTER function [dbo].[fc_SpiltStri ...

  7. python学习心得第五章

    python学习心得第五章 1.冒泡排序: 冒泡是一种基础的算法,通过这算法可以将一堆值进行有效的排列,可以是从大到小,可以从小到大,条件是任意给出的. 冒泡的原理: 将需要比较的数(n个)有序的两个 ...

  8. IIS7.5 webapi 不支持 Delete、Put 解决方法

    在IIS管理界面选择API的项目,选择 “Features View”. 2.  选择 “Handler Mappings” 菜单. 3. 打开“WebDAV” 选项. 4. 点击 “Request ...

  9. C# 实现一个可取消的多线程操作 示例

    private void button1_Click(object sender, EventArgs e) { //定义一个为可取消资源标志 CancellationTokenSource cts ...

  10. jquery template模版引擎

    jTemplates http://jtemplates.tpython.com/ jquery-template  https://github.com/codepb/jquery-template ...