使用Linux多年,SED和AWK两大神器却始终无法得心应手的来提高自己的工作效率,每每需要查找替换,都要依赖于ST2等一众图形工具,深感愧疚,乃专门抽时间学习之,志在使之真正成为左右手。
 
SED历史
 
SED(Stream Editor)意为流编辑器,是Unix常见的命令行程序。是Bell实验室的 LeeE.McMahon 在1973年到1974年之间开发完成,目前可以在大多数操作系统中使用。
 
SED的出现是作为grep的一个继任者,因为grep只能简单的进行查找和替换,但是考虑还可能会有删除等各种需求,McMahon 开发了一个更具通用性的工具。SED著名的语法规则包括使用 / 进行模式匹配,以及 s/// 来进行替代。与同期存在的工具ed一起,sed的语法影响了后来发展的 ECMAScript 和 Perl。GNU sed 添加了很多特性,包括著名的 in-place editing。
 
SED基础
 
替换 Substitution:作为流编辑器,默认情况下,SED会将处理结果输出到终端上,我们可以使用重定向符号,来达到生成新文件的目的。
 
sed 's/regexp/replacement/g' inputFileName > outputFileName
 
在有些版本的sed中,必须加 -e 参数。
 
其他命令:下面这个命令将文件中的空行或者只包含空格的行删除,其中使用了正则的形式,^表示行首,$表示行尾。
 
sed '/^ *$/d' inputFileName
 
脚本 Scripting:SED支持将命令写在脚本中,通过脚本的方式调用命令,同样,也支持Unix中的管道处理。
 
sed -f subst.sed inputFileName > outputFileName
 
subst.sed 文件的内容
#!/bin/sed -f
s/x/y/g
 
原地替换 In-place editing:这个特性在GNU SED中引入,在GNU版本中,-i后的参数是可选的。后来BSD将SED引入后,对于-i参数的处理有所不同,变成了必须的参数。
 
sed -i 's/abc/def/' file
 
常用SED问题
1、Mac下替换文本中的内容
 
Mac的Sed和Linux中的稍有不同,如果需要替换文本内容,需要加 -i 的参数。但是加上 -i 后就必须指定备份文件的后缀名,也就是说,执行替换的时候,会自动备份原文件。如果我们不想要备份怎么办,可以用下面的方法:
 
sed -i '' "s/xx/yy/g" abc.txt
 
也可以这么写
 
sed -ig "s/xx/yy/g" abc.txt
 
 
参考资料:

SED入门的更多相关文章

  1. sed入门详解教程

    sed是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作.sed本身是一个非常复杂的工具,有专门的书籍讲解sed的具体用法,但是个人觉得没有 ...

  2. sed 入门

         sed 是 stream editor(流编辑器)的缩写.它能够完美配合正则表达式使用.sed命令众所周知的一个功能是文本的替换. 1. sed可以替换给定文本中的字符串.它可以配合正则表达 ...

  3. 一分钟sed入门

    [转载于58同城沈剑] 1.简介 sed是一种行编辑器,它一次处理一行内容. 2.sed调用方式 sed [options] 'command' file(s) sed [options] -f sc ...

  4. Linux查找命令:grep,awk,sed

    grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ...

  5. sed原理及使用

    前言 环境:centos6.5 sed版本:GNU sed version 4.2.1 本文的代码都是在这个环境下验证的. 一.简介 sed(Stream Editor)意为流编辑器,是Unix常见的 ...

  6. linux sed使用(转)

    sed入门详解教程 sed 是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作.sed 本身是一个非常复杂的工具,有专门的书籍讲解 sed ...

  7. 本人常用的sed命令用法

    如果使用sed命令修改文件,需要为sed命令指定[-i]选项(i,insert表示插入指令),下面是本人常用到的几种场景: 1. 在文件最后一行的下一行添加配置 如:在配置文件/etc/profile ...

  8. Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)

    Linux运维之道(大量经典案例.问题分析,运维案头书,红帽推荐) 丁明一 编   ISBN 978-7-121-21877-4 2014年1月出版 定价:69.00元 448页 16开 编辑推荐 1 ...

  9. Linux命令行文本工具

    浏览文件 cat 查看文件内容 more 以翻页形式查看文件内容(只能向下翻页) less 以翻页形式查看文件内容(可以上下翻页) head 查看文件的头几行(默认10行) tail 查看文件的尾几行 ...

随机推荐

  1. 深入了解webservice_开发实战篇

    服务器端: 第一: 配置环境 创建一个Web Project,将XFire自己的包及其XFire依赖的jar包(6个jar包)全部导入到classpath下,方法是,只需将jar包粘贴在WebRoot ...

  2. java web sql注入测试(4)--如何防止该类缺陷发生

    检查用户输入的合法性,确信输入的内容只包含合法的数据,数据检查应当在客户端和服务器端都执行之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性.在客户端,攻击者完全有可能获得网页的源代码,修 ...

  3. js默认比较第一个数字大小

    解决办法:先把数字用Number转化:num=Number(num);然后再比较 和parseInt区别

  4. SVN使用(一)

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  5. python any()和all()用法

    #any(x)判断x对象是否为空对象,如果都为空.0.false,则返回false,如果不都为空.0.false,则返回true #all(x)如果all(x)参数x对象的所有元素不为0.''.Fal ...

  6. 【python cookbook】【数据结构与算法】13.通过公共键对字典列表排序

    问题:想根据一个或多个字典中的值来对列表排序 解决方案:利用operator模块中的itemgetter()函数对这类结构进行排序是非常简单的. # Sort a list of a dicts on ...

  7. ARM多核处理器启动过程分析【转】

    转自:http://blog.csdn.net/qianlong4526888/article/details/27695173 版权声明:本文为博主原创文章,未经博主允许不得转载. 说明: 该流程图 ...

  8. 【PHP设计模式 05_DanLi.php】单例模式

    <?php /** * [单例模式] * 总结:防止外部new对象:防止子类继承:防止克隆. */ header("Content-type: text/html; charset=u ...

  9. jdbc连接集合

    JDBC里统一的使用方法:       Class.for(jdbcDriverName);     Connection conn=DriverManager.getConnection(url,u ...

  10. 最全面的Java多线程用法解析

    1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable ...