是对文件中的每一行进行处理,不会对源文件进行修改

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)的更多相关文章

  1. 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放~ ...

  2. [Shell]sed命令在MAC和Linux下的不同使用方式

    ---------------------------------------------------------------------------------------------------- ...

  3. 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' ...

  4. sed: 1: “…”: invalid command code on Mac OS

    昨天因为项目中有很多文件的同一个变量需要批量替换成另一个,想用sed做这个.Linux 这样其实就可以了 ~# sed -i “s/string_old/string_new/g” grep -rl ...

  5. Linux常用命令之sed(2)

    Sed SED的英文全称是 Stream EDitor,它是一个简单而强大的文本解析转换工具,在1973-1974年期间由贝尔实验室的Lee E. McMahon开发,今天,它已经运行在所有的主流操作 ...

  6. Linux命令学习-sed

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

  7. 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 ...

  8. Linux文件编辑之sed命令

    文件编辑之sed命令 sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为模式空间 (pattern space ...

  9. 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 ...

随机推荐

  1. java 空指针异常(java.lang.NullPointerException)

    在Java中对值为null的指针调用任何方法,就会引发空指针异常(java.lang.NullPointerException).空指针异常绝对 是Java中最难查找和调试的一种异常,你永远无法得到任 ...

  2. javascript中的this应用

    1. this作为全局变量2. 作为对象方法的调用3. 作为构造函数调用4. apply调用 this是Javascript语言的一个关键字.它代表函数运行时,自动生成的一个内部对象,只能在函数内部使 ...

  3. Codeforces 234D Cinema

    这题做的我好苦啊,编码调试整整搞了一个多小时,而且调到天昏地暗才调出来.. 回归正题,这题是一道本人做过的比较烦,比较无聊的题之一.题意是一个人,在m个影星里有k个喜欢的影星,然后给出n场电影,每场电 ...

  4. c# 扩展方法奇思妙用

    # 扩展方法出来已久,介绍扩展方法的文章也很多,但都是笼统的.本人最近一直在思考扩展方法的应用,也悟出了一些,准备将这最近一段时间对扩展方法的思考,写成一个系列文章.每个文章只介绍一个应用方面,篇幅不 ...

  5. Linux下squid代理缓存服务环境部署

    代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用户想要下载 ...

  6. Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析(转)

    在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程.由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一 ...

  7. git详细教程

    Table of Contents 1 Git详细教程 1.1 Git简介 1.1.1 Git是何方神圣? 1.1.2 重要的术语 1.1.3 索引 1.2 Git安装 1.3 Git配置 1.3.1 ...

  8. Objective-c复制对象的概念

  9. 让Java说话-用Java实现语音引擎

    让Java说话-用Java实现语音引擎 2005-11-07 10:04:09 分类: Java技术 为应用程序加上语音能力有什么好处呢?粗略地讲,是为了趣味,它适合所有注重趣味的应用,比如游戏.当然 ...

  10. 1.1Linux 系统简介(学习过程)

    =====课程笔记===== 一.Linux 为何物 Linux 是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS . Linux 也就是系统调用和内核两层,我们使 ...