我们对任何文件进行基本操作,显示其内容。为了达到这个目的,我们可以用打印的模式缓冲区的打印命令。本教程将介绍更多的模式缓冲区,以及如何打印使用相关模式缓冲区不同运算符的文件的内容。

考虑一下我们有一个文本文件books.txt待处理,它有以下内容:

1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864

Sed p 命令

我们可以用Sed 'p'命令来打印指定文件的内容。下面是一个简单的命令来打印文件 books.txt 的内容。

[jerry]$ sed 'p' books.txt

当执行上面的代码,就会产生下面的结果。

1) A Storm of Swords, George R. R. Martin, 1216
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
6) A Game of Thrones, George R. R. Martin, 864

让我们找出为什么每个行被打印两次。实际上,在默认情况下,sed打印模式缓冲区的内容。此外,我们已明确地接入命令部分 print  命令。因此,每行打印了两次。Sed有一个-n选项来抑制模式缓冲区的默认打印。让我们试试下面的命令:

[jerry]$ sed -n 'p' books.txt 

当执行上面的代码,就会产生下面的结果。

1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864

Sed 地址范围

默认情况下,sed在所有行上操作。但是,可以强制sed只在某些行上使用。例如,在下面的例子中,sed只运行在第三行。在这个例子中,我们指定 sed 命令前一个地址范围。

[jerry]$ sed -n '3p' books.txt 

当执行上面的代码,就会产生下面的结果。

3) The Alchemist, Paulo Coelho, 197

Sed comma 命令

下面的代码打印2〜5。这里我们使用了逗号(,)运算符指定的地址范围内的所有行:

[jerry]$ sed -n '2,5 p' books.txt 

当执行上面的代码,就会产生下面的结果。

2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288

Sed $ 运算符

我们可以使用美元符号$运算符来打印该文件的最后一行,如下所示:

[jerry]$ sed -n '$ p' books.txt 

当执行上面的代码,就会产生下面的结果。

6) A Game of Thrones, George R. R. Martin, 864

但是,我们也可以使用美元符号($)来指定一个地址范围。下面的例子打印通过第3行到最后一行。

[jerry]$ sed -n '3,$ p' books.txt 

当执行上面的代码,就会产生下面的结果。

3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864

Sed 加操作

sed的加号(+)运算符可以用来与逗号(,)运算符。例如M,+ n将打印的行数M,以下示例开始打印从第2行开始到下一个4行:

[jerry]$ sed -n '2,+4 p' books.txt 

当执行上面的代码,就会产生下面的结果。

2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864

Sed 波浪线运算符

或者,我们也可以使用波浪符号(〜)运算符指定的地址范围。它采用M〜n形式。这表明 sed 应该开始行数M和处理每n(次)行。例如,50〜5行号50,55,60,65,等等。让我们从打印的文件只有奇数行。

[jerry]$ sed -n '1~2 p' books.txt 

当执行上面的代码,就会产生下面的结果。

1) A Storm of Swords, George R. R. Martin, 1216
3) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288

下面的代码仅打印偶数行的文件。

[jerry]$ sed -n '2~2 p' books.txt 

当执行上面的代码,就会产生下面的结果。

2) The Two Towers, J. R. R. Tolkien, 352
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones, George R. R. Martin, 864 

本教程介绍如何sed处理一个模式范围。模式范围可以是一个简单的文本或复杂的正则表达式。我们将开始使用下列内容的文本文件books.txt:

1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864

下面的例子打印的作者所有书籍 Paulo Coelho

[jerry]$ sed -n '/Paulo/ p' books.txt

执行上面的代码,会得到如下结果:

3) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288

Sed通常运行在每一行,并只打印那些符合使用模式的给定条件的行。

我们还可以将一个模式范围,地址范围。下面的例子打印起始行具有Alchemist 的第一行匹配,直到第五行。

[jerry]$ sed -n '/Alchemist/, 5 p' books.txt

执行上面的代码,会得到如下结果:

3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288

可以使用美元符号($)发现的模式第一次出现后打印的所有行。下面的示例查找字符串Fellowship的第一次出现,并立即打印该文件中的其余行

[jerry]$ sed -n '/The/,$ p' books.txt

执行上面的代码,会得到如下结果:

4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864

也可以指定多个模式范围使用逗号(,)运算符。下面的例子打印所有模式 Two 和 Pilgrimage 之间存在的行。

[jerry]$ sed -n '/Two/, /Pilgrimage/ p' books.txt 

执行上面的代码,会得到如下结果:

2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288

此外,我们还可以在模式范围使用的加号(+)运算。下面的例子中发现模式Two第一次出现,并打印它之后的下一个4行。

[jerry]$ sed -n '/Two/, +4 p' books.txt

执行上面的代码,会得到如下结果:

2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864

在这里,只给出了几个例子来熟悉sed。可以自己结合上面例子写几个例子试试。

from: http://www.yiibai.com/sed/sed_useful_recipes.html

Sed教程(三):模式缓冲区、模式范围相关推荐

  1. Sed教程(五):管理模式、正则表达式、使用功能

    我们已经讨论了使用模式和保持缓冲区.现在我们就来探讨更多关于它们使用的例子. n 命令 n命令打印出模式缓冲区的内容,清除模式缓冲器,读取下一行到模式缓冲区,并在其上施加命令.下面给出的是 n命令的语 ...

  2. 【云计算学习教程】IaaS、PaaS和SaaS:云计算的三种服务模式(精讲)

    文章目录 云计算IaaS服务模式精讲 第一层(云管理器) 第二层(集群管理器) 第三层(计算机管理器) 云计算PaaS服务模式精讲 1)半平台 PaaS 2)全平台 PaaS 云计算SaaS服务模式精 ...

  3. 交换机的三种转发模式

    下面是交换机6大工作原理: 1.基于源MAC地址学习 2.基于目标MAC地址转发  3.同一接口可以学习到多个MAC地址  4.同一个MAC地址被多个接口学习到,选择后学习到的接口 5.收到广/组播帧 ...

  4. LVS负载均衡:三种工作模式、十种调度算法

    一.LVS简介 二.三种工作模式的解析       2.1 基于NAT的LVS模式负载均衡       2.2 基于TUN的LVS负载均衡       2.3 基于DR的LVS负载均衡 三.LVS负载 ...

  5. WCF三种通信模式(转)

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  6. [转]LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

    一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现 ...

  7. LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

    转载:https://blog.csdn.net/weixin_40470303/article/details/80541639 一.LVS简介 LVS(Linux Virtual Server)即 ...

  8. 【Tomcat】Tomcat Connector的三种运行模式【bio、nio、apr】

    Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行模式 bio bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O ...

  9. Tomcat Connector的三种运行模式【bio、nio、apr】

    Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行模式 bio bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O ...

最新文章

  1. Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet
  2. Android 必须知识 PWA Android Instant Apps
  3. 《系统集成项目管理工程师》必背100个知识点-11系统集成供应商内部立项的原因和内容
  4. 在GitHub中创建目录
  5. 西南科技计算机在线自测,西南科技大学2017春季第一学期高等数学1在线自测答案...
  6. 赛门铁克:业务整合才是正道,并非一心二用
  7. 前端学习(2456):文章列表
  8. 转载:tcpdump抓包和Wireshark解包
  9. php mysql 高亮显示_PHP实现多关键字加亮功能
  10. HDU 6182 2017广西邀请赛:A Math Problem
  11. 地理探测器——空间统计分析
  12. 地砖中间高四边低_客厅棚顶有黑镜在风水里讲怎么样 装修中橱柜里的白色色块用哪个做,怎么施工...
  13. 矩形已知三个点的坐标,求第四个点的坐标
  14. mq 的Publish/Subscribe 模式
  15. node.js中模块化开发(Gulp4)
  16. 尚医通项目101-123:前台用户系统、登录注册、邮箱登录
  17. JDK中java.exe,javadoc.exe,jdb.exe,javaprof.exe分别是什么,有什么作用?
  18. 微信授权时遇到48001的问题
  19. html自动执行bat,bat脚本启动程序 怎么命令bat打开某个文件
  20. HCIE 面试资料-BFD/NSF/NSR/NTP

热门文章

  1. 转载:谢谢原作者:块设备驱动实战基础篇一 (170行代码构建一个逻辑块设备驱动)
  2. ADSL宽带为什么下载和上传速度差别如此之大?
  3. jvm性能调优 - 20G1垃圾回收器应该如何设置参数
  4. 实战SSM_O2O商铺_38【商品类别】解除商品与商品类别的关联
  5. Spring-AOP @AspectJ切点函数导读
  6. 学习笔记(十九)——Python与数据库交互(mysql、redis)
  7. java绘图板_Java中的画图板简单功能实现
  8. python序列类型有_Python序列类型
  9. android ip地址扫描,Android:手机扫描局域网所有ip,并进行socket通讯
  10. 三星关闭shell提示_凌晨系统崩溃,低级千年虫问题,三星就是这样将中国市场拱手相让...