这是一份世界上最好的sed教程,sed是unix系统下流编辑里的超人。最初我写这份说明是为了我的

第二本电子书,然而随后我决定把这份说明变成一本免费电子书预览的同时再次做为文章发布到这里。

Sed说明

掌握sed可以简化为理解和操作sed的四种空间,这四种空间分别为:

  • 输入流
  • 模式空间
  • 保持空间
  • 输出流

可以这样去想像空间这个词,sed读入输入流和产生输入流,在内部它有模式空间和保持空间。sed从输入流读入数据直到它读到换行字符(\n),然后它把当前读到的数据(不包含新行字符)放入模式空间。大部分的sed命令在模式空间操作读入的数据。保持空间的存在是为了方便操作,可以把它想像成一个你可以在模式空间和保持空间之间复制和交换数据的临时缓冲。当sed执行完所有的命令后,它输出模式空间的内容并在结尾加上一个换行符(\n).

可以使用-n选项去修改sed的行为。当使用-n选项的时候,sed不输出模式空间,你必须使用p或P命令明确指定打印。

让我们通过一些实例来理解这四种空间和sed。这些仅仅是一些描述sed看起来像什么 和它是什么的例子。

以下可能是最简单的sed程序

sed ‘s/foo/bar/’

这个程序在每一行上将文本foo替换为文本bar。它的工作方式是这样的,考虑你有一个包含这些行的文件:

abc
foo
123-foo-456

sed打开这个文件作为输入流,并开始读入这个文件。当它读abc的时候发现一个新行字符(\n), 它就把abc放入模式空间并应用s/foo/bar命令,因为在模式空间的文本字符是“abc”,没有文本字符“foo”,sed不对模式空间做任何操作。 此刻,sed已经执行完了所有的命令(此例中仅仅只有一个命令),当所有的命令执行完的默认动作是打印模式空间和新行字符(\n),所以第一行的输出是“abc\n”

现在sed读第二行到模式空间,执行s/foo/bar. 这将会用foo替代bar,模式空间里就只包含“bar”, 到达命令的结尾,然后sed打印模式空间的内容,跟着是新行字符(\n). 第二行输出为“bar\n”

现在读入第三行的内容,模式空间的内容为“123-foo-456”, 因为文本“123-foo-456里含 有foo”,命令“s/foo/bar执行成功,模式空间里的内容就变为“123-bar-456”,到达命令的结尾,然后sed打印模式空间的内容。输出为“123-bar-456\n”

此刻文件所有的行已经读入处理然后sed退出。示例脚本的输出为

abc
bar
123-bar-456

因为不需要临时存储这个例子里没有用到保持缓冲空间

在看有临时存储的例子之前,让我们来看一看三个命令行开关:-n,-e和-i。首先是-n

如果对sed指明-n选项,如下:

[kennminn@bogon Script]$ sed -n 's/foo/bar/' t1.txt

然后当执行完脚本时sed将不会打印模式空间的内容。所以如果你对上面的示例文件执行这个程序,将不会有输出。你必须使用sed的p命令强制打印空间的内容。

[kennminn@bogon Script]$ sed -n 's/foo/bar/;p' t1.txt
abc
bar
123-bar-456

你可以看到,sed命令以分号(;)分隔。你也可以使用-e选项来分隔命令:


[kennminn@bogon Script]$ sed -n -e 's/foo/bar/' -e 'p' t1.txt
abc
bar
123-bar-456

它和你使用分号(;)分隔是一样的效果,接下来,让我们看一看-i这个命令行选项。这个命令强制sed原位置修改目标文件。意味着它会读取这个文件内容,执行sed命令,然后把新的内容放回到文件。

这里有一个例子,考虑你有一个文件叫做“users”,它里面有以下内容

pkrumins:hacker
esr:guru
rms:geek

你希望将整个文件中的“:”以“;”替换。你可以这样简单的处理:

[kennminn@bogon Script]$ sed -i 's/:/;/' users.txt
pkrumings;hacker
esr;guru
rms;geek

它将静静的在文件中所有行上执行‘s/

世界上最好的Sed教程的更多相关文章

  1. Nivo Slider - 世界上最棒的 jQuery 图片轮播插件

    Nivo Slider 号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如 ...

  2. 用Visual Studio Code Debug世界上最好的语言

    前言 这阵子因缘巧合接手了一个辣鸡项目,是用世界上最好的拍黄片写的,项目基本是另一个小伙伴在撸码,我就兼职打杂和发布做点运维的工作. 然后昨天项目上了测试版之后,一用起来Error满天飞了.让小伙伴查 ...

  3. 用Visual Studio Code Debug世界上最好的语言(Mac篇)

    用Visual Studio Code Debug世界上最好的语言(Mac篇) 首先,你要有台Macbook Pro,接着才继续看这个教程. PS:Windows用户看这里用Visual Studio ...

  4. 【转载】可能是世界上最牛逼的网站统计程序——Matomo

    大家做网站的时候一般都会使用网站统计程序.通常,国内网站会使用百度统计.CNZZ等,而国外网站则会使用Google Analytics等统计.国内的统计程序普遍功能不太丰富,且响应速度一般.Googl ...

  5. 干货!上古神器 sed 教程详解,小白也能看的懂

    目录: 介绍工作原理正则表达式基本语法数字定址和正则定址基本子命令实战练习 介绍 熟悉 Linux 的同学一定知道大名鼎鼎的 Linux 三剑客,它们是 grep.awk.sed,我们今天要聊的主角就 ...

  6. 史上最详细git教程

    题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...

  7. 为什么我会认为SAP是世界上最好用最牛逼的ERP系统,没有之一?

    为什么我认为SAP是世界上最好用最牛逼的ERP系统,没有之一?玩过QAD.Tiptop.用友等产品,深深觉得SAP是贵的有道理! 一套好的ERP系统,不仅能够最大程度承接适配企业的管理和业务流程,在技 ...

  8. 世界上不存在什么RedBSD,SuseBSD或者ArchBSD,Turb...

    世界上不存在什么RedBSD,SuseBSD或者ArchBSD,TurboBSD之类的东西.

  9. hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)

    小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)T ...

随机推荐

  1. vue用mand-mobile ui做交易所移动版实战示例

    vue用mand-mobile ui做交易所移动版实战示例 先展示几个界面: 目录结构: main.js // The Vue build version to load with the `impo ...

  2. Shell cace条件语句

    cace条件语句,取相对应的多个值,进行输出. 语句:case语句:case $n in 回车\  值)回车\ 命令 :: 值)命令 esac case $1 in start) echo “启动” ...

  3. Linux 进程级开启最大文件描述符 调优

    开启最大文件数 系统可以开启的最大文件描述符(可同时开启最多的文件数),最大开启65535,可根据需求进行调优. 查看系统当前可开启最大文件描述符数 ulimit -n [root@localhost ...

  4. esp32-micropython

    本来之前买和另一贴子的esp8266一起买了一块esp32. 现在开发esp的大概有乐鑫的ide以及基于乐鑫定制的.arduino.nodemcu.还有就是现在要讲的micropython. 乐鑫的主 ...

  5. jQuery validator plugin 之 custom methods 案例1:multi email

    1.add method jQuery.validator.addMethod( "multiemail", function (value, element) { var ema ...

  6. R语言-默认镜像设置

    问题1:如何设置默认镜像 你希望下载某些R包,因此希望设定默认的CRAN网站镜像,这样R每次下载时不需要你选择镜像. 解决方案 该方案要求用户R系统中包含一个.Rprofile文件,如方法3.16描述 ...

  7. CTF显隐术:九连环

    题目:http://www.shiyanbar.com/ctf/2007 这个也挺基础的,需要注意的是:1.不要因为binwalk扫不出来就以为没有隐藏嵌入数据.2.千万不要暴力破解压缩包,如果是这样 ...

  8. Flex外包公司——Flex案例展示

    Flex案例展示 做的mail系统:  http://gowebtop.com/webtop/ 在线购书网站  http://book.orzar.net/ eBay购物网站  http://www. ...

  9. PHP冒泡排序-手写

    <?php $a = [1,3,5,2,9,6]; for ($i = 0 ;$i < count($a) ;$i++) { for ($j = $i + 1;$j < count( ...

  10. adt安装----只为测试使用adb命令,故无需安装过于复杂

    下载并安装Android SDK  借鉴自原文 https://blog.csdn.net/qq_15304853/article/details/79168248 官网(可FQ选择):http:// ...