《sed的流艺术之四》-linux命令五分钟系列之二十四
本原创文章属于《Linux大棚》博客,博客地址为http://roclinux.cn。文章作者为rocrocket。
为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅。
===
[正文开始]
上文接《sed的流艺术之三》-linux命令五分钟系列之二十三
例十 如果设定了很多-e的command,它们的执行顺序是怎样的呢?
[rocrocket@rocrocket programming]$ cat mysed.txt
Beijing 2003
Beijing 2004
Beijing 2005
Beijing 2006Beijing 2007
Beijing 2008
[rocrocket@rocrocket programming]$ sed -e ‘s/Beijing/London/g’ -e ‘/Beijing/d’ mysed.txt
London 2003
London 2004
London 2005
London 2006
London 2007
London 2008
后一个-e中包含了删除Beijing所在行,但是最后的结果却是所有行都输出了,其实这就是由执行顺序导致的,第一个-e已经将Beijing都替换成了London了,所以怪不得第二个-e找不到Beijing了。
例十一 读取一个特定文件的内容,将其插入到本文件指定的地方:
[rocrocket@rocrocket programming]$ cat ins.txt
====China====
[rocrocket@rocrocket programming]$ cat mysed.txt
Beijing 2003
Beijing 2004
Beijing 2005
Beijing 2006
Beijing 2007
Beijing 2008
[rocrocket@rocrocket programming]$ sed ‘/2005/r ins.txt’ mysed.txt
Beijing 2003
Beijing 2004
Beijing 2005
====China====
Beijing 2006
Beijing 2007
Beijing 2008
此命令用于在含有2005的行下面插入ins.txt文件的内容。
例十二 将某些指定行写入到特定文件中
[rocrocket@rocrocket programming]$ sed ‘/200[4-6]/w new.txt’ mysed.txt
Beijing 2003
Beijing 2004
Beijing 2005
Beijing 2006
Beijing 2007
Beijing 2008
[rocrocket@rocrocket programming]$ cat new.txt
Beijing 2004
Beijing 2005
Beijing 2006
看,w new.txt表示将含有2004、2005、2006的行写入到new.txt文件中。
例十三 使用a\在特定行“下面”插入特定内容
[rocrocket@rocrocket programming]$ cat new.txt
Beijing 2004
Beijing 2005
Beijing 2006
[rocrocket@rocrocket programming]$ sed ‘/2004/a\China’ mysed.txt
Beijing 2003
Beijing 2004
China
Beijing 2005
Beijing 2006
Beijing 2007
Beijing 2008
使用a\然后加上需要加的内容即可。
例十四 使用i\在特定行“上面”插入特定内容
[rocrocket@rocrocket programming]$ sed ‘/2004/i\China’ mysed.txt
Beijing 2003
China
Beijing 2004
Beijing 2005
Beijing 2006
Beijing 2007
Beijing 2008
例十五 替换特定字符
[rocrocket@rocrocket programming]$ cat mysed.txt
Beijing 2003
Beijing 2004
Beijing 2005
Beijing 2006
Beijing 2007
Beijing 2008
[rocrocket@rocrocket programming]$ sed ‘y/eijng/EIJNG/’ mysed.txt
BEIJING 2003
BEIJING 2004
BEIJING 2005
BEIJING 2006
BEIJING 2007
BEIJING 2008
使用了y就表示将第一栏的每个字符都替换为相对应的第二栏的字符。
例十六 对匹配行的下一行进行处理
[rocrocket@rocrocket programming]$ cat mysed.txt
Beijing 2003
Beijing 2004
Beijing 2005
Beijing 2006
Beijing 2007
Beijing 2008
[rocrocket@rocrocket programming]$ sed ‘/2004/{n;y/eijng/EIJNG/;}’ mysed.txt
Beijing 2003
Beijing 2004
BEIJING 2005
Beijing 2006
Beijing 2007
Beijing 2008
这个例子就是找含有2004的行,然后将它下面的一行中的eijng替换为大写的EIJNG。这里面的“n;”起到了“移至下一行”的作用。n背后的含义其实是将下一行放到模式空间中去。
[rocrocket@rocrocket programming]$ cat mysed.txt
Beijing 2003
Beijing 2004
Beijing 2005
Beijing 2006
Beijing 2007
Beijing 2008
[rocrocket@rocrocket programming]$ sed ‘/200/{n;y/eijng/EIJNG/;}’ mysed.txt
Beijing 2003
BEIJING 2004
Beijing 2005
BEIJING 2006
Beijing 2007
BEIJING 2008
这个例子更加典型,你可以发现,BEIJING是隔行出现的。你知道为什么么?不说答案了,相信你能自己思考出来!
ps:sed的流艺术系列到这里就结束了:)
ps:其实sed的学问还很大,正则表达式也有很多需要学习的地方,我也在学习中…这个小系列,就当抛砖引玉了,希望对你有用!
总结下:
命令格式:
sed [选项] ‘command’ 文件
选项:-n,-e,-f
command命令包括两部分,一部分是指定范围(m,n指定行范围或者正则表达式匹配出要处理的行,也可以不指定而处理所有的行),一部分就是处理命令
下面是处理命令:
查找替换:'s/string1/string2/g' 用string2替换string1,可以使用这个正则表达式,g表示global,是可选项
替换特定字符:‘y/abc/def/’ 用def替换对应的abc
指定行下插入新行:'/m/a\string' 将string插入m的下面
指定行上插入新行:'/m/i\string' 将string插入m的上面
删除行:'/m,n/d'
打印行:‘/m,n/p’ 一般与-n一起使用,打印要处理的行
插入filename:‘/m,n/r filename’
导出到filename:‘/m,n/w filename’
使用sed脚本:sed -n -f jiaoben.sed file
输入下一行:'/指定行/{n;其他命令;}' 实际上就是将下一行作为当前行然后处理,假设处理行使用的是指针,那么可以理解为将指针向下移动一行,然后处理。
《sed的流艺术之四》-linux命令五分钟系列之二十四的更多相关文章
- 《sed的流艺术之二》-linux命令五分钟系列之二十二
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《paste命令》-linux命令五分钟系列之二十
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sort帮你排序》-linux命令五分钟系列之二十六
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《tr命令-优化版》-linux命令五分钟系列之二十五
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之三》-linux命令五分钟系列之二十三
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之一》-linux命令五分钟系列之二十一
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《vi中的替换艺术》-linux命令五分钟系列之十一
vi方面的内容不知道分类到哪里好,就放到<Linux命令五分钟系列>里吧! 今天编程,关于栈的一个小例子,其间我需要把”S.”替换为”S->”(替换不包括双引号). 其实这个不难,不 ...
- 《sort命令的k选项大讨论》-linux命令五分钟系列之二十七
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《service》-“linux命令五分钟系列”之二
本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...
随机推荐
- 问题-[致命错误] Project1.dpr(1): Unit not found: 'System.pas' or binary equivalents (DCU,DPU)
问题现象:[致命错误] Project1.dpr(1): Unit not found: 'System.pas' or binary equivalents (DCU,DPU) 问题原因:由于删除D ...
- yaxim
Site: http://yaxim.org/yax.im/ Code: https://github.com/ge0rg/yaxim
- 征服 Nginx + Tomcat【转】
征服 Nginx + Tomcat Server Architecture/Distributed nginxtomcatsessioncluster 2年前一直折腾Apache,现如今更习惯Ngi ...
- android中利用实现二级联动的效果
按照惯例,首先上一张效果图. 本篇文章实现的效果就是如图中所圈的那样,实现类似于HTML中的二级联动的效果. 对于第一个选项我们读取的是本地xml文件来填充数据的, 对于第二个选项我们读取的是通过中央 ...
- [Webpack 2] Optimize React size and performance with Webpack production plugins
You can fine tune several webpack plugins to make your bundle as small as it can be for your specifi ...
- 标准I/O库之打开和关闭流
下列三个函数打开一个标准I/O流. #include <stdio.h> FILE *fopen( const char *restrict pathname, const char *r ...
- Java中创建线程的两种方式
创建线程的第一种方式: 创建一个类继承Thread 重写Thread中的run方法 (创建线程是为了执行任务 任务代码必须有存储位置,run方法就是任务代码的存储位置.) 创建子类对象,其实就是在创建 ...
- web项目设计与开发——DBHelper
学习web项目设计与开发主要是在上学期web程序开发的基础上添上了思想和更深的理解. 在学习之前,我们需要下载好相关的软件——MyEclipse以及配置文件JDK.tomcat.再添加除MyEclip ...
- c#的方法重写和的java方法重写有什么区别
java code: package example; class m1 { public int getInt() { return 0; } } class m2 extends m1 { pub ...
- modelsim remote
远程桌面登陆我的台式机上的账号,然后运行modelsim 出现该问题: Unable to checkout a viewer license necessary for use of the Mod ...