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. 创建Unicode格式的INI文件

    前段时间由于开发一个软件,需要调用别人的接口,虽然我的软件是Unicode编码,对方的模块也是Unicode编码,但是对方提供的接口却是Ansi接口,在非中文系统下,由于涉及到中文路径,导致Ansi和 ...

  2. highCharts 饼图动态加载

    饼图的动态加载 (1):导入样式 <script type="text/javascript" src="<%=request.getContextPath( ...

  3. Xcode 7.2.1 下载地址

    Xcode 7 下载地址(需要登录苹果开发者帐号) 7.2.1:https://developer.apple.com/services-account/download?path=/Develope ...

  4. (转)javascript异步编程的四种方法

    本文转自:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 作者:阮一峰 本文仅仅作为个人mark ...

  5. DELPHI 读取csv 格式文本文件

    procedure TForm1.btn1Click(Sender: TObject); var sFile,sLine: TStrings; r,c:Integer; begin sFile := ...

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

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

  7. APS.net controller

    在controller 路由配置为: routes.MapRoute( name:"Default", url:"{controller}/{action}/{id}&q ...

  8. ARCGIS Server 发布服务时出现的问题解决

    target='CFH.ConfigurationFactoryHost'  machine='IBM3850X5'  thread='24072'  elapsed='0.31200'>Ser ...

  9. html中表格的制作

    <table summar="给表格添加摘要".> <captioan> 给表格添加标题 </caption> <tr> <t ...

  10. [原创.数据可视化系列之二]使用cesium三维地图展示美国全球军事基地分布

    基于浏览器的三维地图还算是一个比较高冷的东西,最主要的技术难点是如何在浏览器上 多快好省 的显示三维数据,很遗憾,还真的没有太好的的方案,只能说还有可行的方案. 很久之前用过skyline,使用CS居 ...