Learn sed using these command on Linux(流线式编辑器——sed)
是对文件中的每一行进行处理,不会对源文件进行修改
sed --version
sed '11d' sed_file
sed -n '/[Bb]erry/p' sed_file (由于设置了n,所以只打印出有Berry/berry的行)
sed '/[Bb]erry/p' sed_file(没有设置n,则会输出所有的行,同时有Berry/berry的行会输出两次)
sed 's/berry/bbery/' sed_file
sed '/^berry/p' sed_file (打印所有以berry开头的那一行)
sed '/[^b]erry/p' sed_file (打印出所有不包含以b开头,并且紧跟着erry的行,这种匹配是根据一个单词来说德)sed -n '/.erry/p/' sed_file (.代表是任意非换行的字符)
x\{m\} 重复字符X,M次
x\{m,\} 重复字符X,至少M次
x\{m,n\}a 重复字符X,至少M次,不多于N 次
sed '/r\{2\}/p sed_file (匹配2个r,至少有2个r 或 2~10个r 的行)
sed '3,$d' sed_file (删除第3行到最后一行,其他的行被打印)
\(..\) 保存匹配的字符 s/\(love\)able/\1rs/ 标签标记出来的部分被保存在1号标签中,为了方便在后面引用,使用\|来表
示,\|将被标签标记出来的模板替换,从表达式的最左边开始,向右最多可以使用9个标签。
例如,love被保存在寄存器1当中,并稍后用做字符串替换。loveable就被替换为lovers 3
#sed -n 's/\(Mar\)got/\1ianne/p' datafile
north NO Marianne Weber 4.5 .89 5 9
说明:
模板Mar 被包含在一对括号内,并在特殊的寄存器中保存为标签1(tag1),它将在后面作为\1
替换字符串。Margot替换所有的Marianne。
#sed -n 's/\(berry\)/\1able/gp' sed_file (同理,所有的berry都将被berryable所替换,并打印出这些被处理的行)
#sed 's/berry/&able/gp' sed_file (结果与上相同)
sed 's#3#88#g' datafile (#相当于/,作为搜索字符串和替换字符串的分隔符,默认分隔符是/,但是在s 命令使用
的情况下可以改变。不论什么字符紧跟着s 命令都被认为是新的分隔符。这个技术在搜索包含斜杠
的模板时非常有用,例如搜索时间和路径的时候。)
sed -n'/west/,/east/p' datafile(所有在模板west 和east所确定的范围内的行都被打印。如果west出现在east后面的行中,从west
开始到下一个east,无论这个east出现在那里,二者之间的行都将被打印,即使从west开始到了文件的末尾如果还没有出现east,
那么从west 到末尾的所有的行都将打印。箭头所表示的就是被打印的范围。)
sed '/west/,/east/s/$/**VACA**/' datafile (对于模板east 和west 之间的行,每行的末尾用字符串**VACA**替换,下一行都被移动到该字
符串的后面)
多点编辑:e 命令
sed -e '1,3d' -e 's/Berry/berry/p' sed_file(先删除,后进行字符串替换)
因为两个命令是在同一行执行(也就是说,两个命令都是在当前行的固定空间中执行),所以命令的执行顺序将影响命令的结果。
sed -–expression='s/TB/Tobias/' -–expression='/north/d' datafile
从文件读入:r命令
sed '/Suan/r newfile' datafile
命令 r 表示从文件中读取指定的行。newfile 文件的内容被读入输入文件datafile 中,显示在与
suzan相匹配的行的后面。如果suzan在不止一行中出现,newfile的内容就将显示在所有匹配行的下
面。
写入文件:w命令
sed –n '/north/w newfile2' datafile
命令w表示把一个指定的行写入文件。所有包含north的行都将被写入名为newfile2的文件中。
追加:a 命令(a\)
sed '/^north /a\\
--->THE NORTH SALES DISTRICT HAS MOVED<---' datafile
命令a表示追加。字符串--->THE NORTH SALES DISTRICT HAS MOVED <---将被追加到以
north开头,且north后面有空格的行的后面。需要被追加的文本必须写在命令行中追加命令的后面。
sed要求在命令a后面有一个反斜杠。第二个反斜杠表示在TC Shell下转义换行符,这样才能在
下一行完成引用。a如果被追加的不止一行,除了最后一行,每一行也都要用反斜杠结束。
插入:i命令
sed '/eastern/i\\
NEW ENGLAND REGION
--------------------------------' datafile
命令 i 是插入命令。如果模板eastern 被匹配,i 命令就把反斜杠后面的文本插入到包含eastern
的行的前面。除了最后一行,每一行插入完成后都需要反斜杠(额外的反斜杠是用来满足TC Shell
的要求的)。
下一个:n命令
sed '/eastern /{ n; s/AM/Archie/; }' datafile
如果模板eastern 匹配了某一行,n 命令就移动到输入文件中该行的下一行,替换这一行的模式
空间。即用Archie替换AM,打印该行,然后再继续。
变形:y命令
sed '1,3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKL
MNOPQRSTUVWXYZ/' datafile
对于1~3行,y命令把所有的小写字符转变为大写字符。正则表达式元字符不能使用这个命令。
退出:q命令
sed ‘5q' sed_file
sed '/Lewis/{ s/Lewis/Joseph/;q; }' datafile(在Lewis匹配的行,先用Joseph替换Lewis,然后退出sed程序)
保持和获取:h命令和g命令
sed -e '/northeast/h' -e '$G' datafile (如果有多行northeast匹配,那么只会把最近的保存进保持缓冲区的字符串追加到模式空间中)
在sed处理的文件的时候,每一行都被保存在一个叫作模式空间(pattern space)的临时缓冲区
中。除非行被删除或者输出被取消,否则所有被处理过的行都将打印在屏幕上。接着模式空间被清
空,并存入新的一行等待处理。在这个例子中,包含模板的northeast 行被找到,并被放入模式空间
中,h命令将其复制并存入一个称为保持缓冲区(holding buffer)的特殊缓冲区内。在第二个sed 结
构中,当达到最后一行后,G命令告诉sed 从保持缓冲区中取得该行,然后把它放回到模式空间中,
且追加到现在已经存在于模式空间中的行的末尾——在这个例子中,就是追加到最后一行。简单来
讲:任何包含模板northeast 的行都将被复制并追加到该文件的末尾。
sed -e '/northeast/h' -e '$g' datafile (g和G的区别,g 会替换掉最后一行,而G是追加到其后面)
h命令和x命令
sed –e '/patricia/h' -e '/Margot/x' datafile
命令x表示互换模式空间和保持缓冲区的内容。当模板patricia被匹配,该行将被保存到保持缓
冲区中。当包含Margot 的行被找到,模式空间将与保持缓冲区交换彼此的行。简单地说,就是包含
Margot的行被包含patricia的行替换了。
-f sed 脚本
sed -f scrript_file sed_file
sed –n 'l' sed_file 打印所有包含不能打印字符的行
Learn sed using these command on Linux(流线式编辑器——sed)的更多相关文章
- centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课
centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~ ...
- [Shell]sed命令在MAC和Linux下的不同使用方式
---------------------------------------------------------------------------------------------------- ...
- mac上执行sed的编辑 -i命令报错sed: 1: "test.txt": undefined label ‘est.txt’或sed: 1: "2a\test\": extra characters after \ at the end of a command
问题一 sed编辑命令:[sed -i 's/a/b/g' test.txt] 报错:sed: 1: "test.txt": undefined label 'est.txt' ...
- sed: 1: “…”: invalid command code on Mac OS
昨天因为项目中有很多文件的同一个变量需要批量替换成另一个,想用sed做这个.Linux 这样其实就可以了 ~# sed -i “s/string_old/string_new/g” grep -rl ...
- Linux常用命令之sed(2)
Sed SED的英文全称是 Stream EDitor,它是一个简单而强大的文本解析转换工具,在1973-1974年期间由贝尔实验室的Lee E. McMahon开发,今天,它已经运行在所有的主流操作 ...
- Linux命令学习-sed
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
- Sending Email from mailx Command in Linux Using Gmail’s SMTP
The mailx or mail command in Linux is still providing service for guys like me, especially when we n ...
- Linux文件编辑之sed命令
文件编辑之sed命令 sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为模式空间 (pattern space ...
- Using Android Phone to recover SD card formatted with DD command under linux
Using Android Phone to recover SD card formatted with DD command under linux 1. Formatted a sd card ...
随机推荐
- bzoj-2338 2338: [HNOI2011]数矩形(计算几何)
题目链接: 2338: [HNOI2011]数矩形 Time Limit: 20 Sec Memory Limit: 128 MB Description Input Output 题意: 思路 ...
- Codeforces Round #253 Div2 D.Andrey and Problem 概率+贪心
概率计算:P(某set) = 令: 和 现在考虑: 1.考虑某个集合,再加一个概率为Pi的朋友后能不能使总概率提高. 即: 由公式可知, 如果 S < 1,则delta > 0,则 ...
- 数据结构Java实现05----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
- 创建Java Web监听器
之前从Java web一路学习过来,一直没有学习过Servlet容器类的一些高级用法,因为学完简单的JSP以及Servlet编写之后就开始了Spring的学习 对web应用的一些常用变量进行 appl ...
- 09Spring_AOP介绍和java本身的动态代理以及cglib代理
Aspect Oriented Programming 面向切面编程 1. 业界 AOP 实际上 OOP (面向对象编程 ) 延伸 ---- OOP编程语言. AOP设计思想,下面给出一张AOP的设 ...
- Socket Programming in C#--Conclusion
Conclusion And that's all there is to it! Here is how our client looks like Here is how our server l ...
- Android -- Properties使用
import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Properties; public ...
- [CareerCup] 13.8 Smart Pointer 智能指针
13.8 Write a smart pointer class. A smart pointer is a data type, usually implemented with templates ...
- jquery实现文件异步上传
前言 这里用了2个JS插件,一个是Jquery原生js,我的版本是jquery-1.7.2.min.js,另一个是jquery.form.js.这个form.js 是关键,不可少哦.另外, 我的服务器 ...
- 浅入DNS
1.DNS是怎么工作的 首先我们可以很简单的理解DNS协议,它就是一个将域名与ip地址进行双向转换的协议,而消息类型只有查询和回应2种类型.那客户端查询域名,是要请求谁呢?答案是域名服务器,现在域名服 ...