世界上最好的Sed教程
这是一份世界上最好的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教程的更多相关文章
- Nivo Slider - 世界上最棒的 jQuery 图片轮播插件
Nivo Slider 号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如 ...
- 用Visual Studio Code Debug世界上最好的语言
前言 这阵子因缘巧合接手了一个辣鸡项目,是用世界上最好的拍黄片写的,项目基本是另一个小伙伴在撸码,我就兼职打杂和发布做点运维的工作. 然后昨天项目上了测试版之后,一用起来Error满天飞了.让小伙伴查 ...
- 用Visual Studio Code Debug世界上最好的语言(Mac篇)
用Visual Studio Code Debug世界上最好的语言(Mac篇) 首先,你要有台Macbook Pro,接着才继续看这个教程. PS:Windows用户看这里用Visual Studio ...
- 【转载】可能是世界上最牛逼的网站统计程序——Matomo
大家做网站的时候一般都会使用网站统计程序.通常,国内网站会使用百度统计.CNZZ等,而国外网站则会使用Google Analytics等统计.国内的统计程序普遍功能不太丰富,且响应速度一般.Googl ...
- 干货!上古神器 sed 教程详解,小白也能看的懂
目录: 介绍工作原理正则表达式基本语法数字定址和正则定址基本子命令实战练习 介绍 熟悉 Linux 的同学一定知道大名鼎鼎的 Linux 三剑客,它们是 grep.awk.sed,我们今天要聊的主角就 ...
- 史上最详细git教程
题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...
- 为什么我会认为SAP是世界上最好用最牛逼的ERP系统,没有之一?
为什么我认为SAP是世界上最好用最牛逼的ERP系统,没有之一?玩过QAD.Tiptop.用友等产品,深深觉得SAP是贵的有道理! 一套好的ERP系统,不仅能够最大程度承接适配企业的管理和业务流程,在技 ...
- 世界上不存在什么RedBSD,SuseBSD或者ArchBSD,Turb...
世界上不存在什么RedBSD,SuseBSD或者ArchBSD,TurboBSD之类的东西.
- hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)T ...
随机推荐
- Py't'hon之csv,ini&序列化,反序列化
1.csv文件简介 csv是一个被行分隔符,列分隔符划分成行和列的文本 csv不指定字符编码 行分隔符为\r\n,最后一行可以没有换行符 列分隔符常为逗号和制表符 每一行称之为record from ...
- 221. Maximal Square(动态规划)
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and re ...
- 重新设计导出API
优雅的API是清晰简洁的,就像少女的肌肤一样柔滑. 背景 API 是软件应用向外部提供自身服务的一种形态和公开接口.就像一个人的着装打扮.举止言行.形象状态,是其内在的某种体现.很少有人能看到对方灵魂 ...
- Matlab的用法总结
1. 对序列进行洗牌 randperm() randperm()产生随机的序列 %if filepaths 是一个5*1的结构体,then cshuffle = randperm(length(fil ...
- Linux基础命令---cancel取消打印任务
cancel cancel指令用来取消已经存在的打印任务. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.openSUSE.SUSE. 1.语法 ...
- 根据MAC地址获取网络地址及ZDP_NwkAddrReq函数的用法
1..对于设备需要获取本设备的网络地址和MAC地址: NLME_GetShortAddr()——返回本设备的16位网络地址 NLME_GetExtAddr()—— 返回本设备的64位扩展地址 2.使 ...
- 模块 import 与from
什么是模块:就是一系列功能的集合体 模块的来源 :1内置模块 2 第三方模块 3 自定义模块 模块的格式: 1 使用python编写的.py文件 2 已被编译为共享库或DLL的C或C++扩展 ...
- 自制操作系统Antz(3)——进入保护模式 (中) 直接操作显存
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...
- linux bash tutorial
bash read-special-keys-in-bash xdotool linux 登录启动顺序
- 剑指offer(42)和为S的字符串
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 题目 ...