本文提要:

  • sed 命令定位方式的分类
  • 着重对 /pattern/,/pattern/ 的定位方式进行阐述

定位方式分类

总体上,只需要分为两类,即:x 和 x,y 。如果在范围后加 ! 则表示取补集,即指定范围之外的所有行。

其中,x 和 y 均有两种形式,即:数字和正则表达式,数字直接指定即可,正则表达式则用 /pattern/ 格式给出。举两个栗子:2,4 表示第 2 行到 第 4 行;/stdio.h/,5 简单说可以阐述为匹配 stdio.h 的行到第 5 行的范围,但是不准确,因为正则表达式匹配的行可能不止一行,更可能比后者行号大,这种情况下要分析其范围,则需要按照一定的规则分析,请看下一节。

另外一些资料说 /pattern/pattern/ 表示查询两个表达式,笔者在自己的平台上测试了发现不行,不知是否打开方式不正确(GNU sed 4.4),但是其支持扩展正则表达式(-E 选项),所以可以用扩展正则实现。

定位方式分析

这里直接给出结论,然后再给出一个简单的极端的栗子用以验证。针对 x,y (x,y均可能是由 /pattern/ 匹配的多行)的匹配方式结论为:

首先假定一个控制输出的开关,然后从首行依次匹配,到 x 集合中的行时,就打开输出开关,允许输出,到 y 集合中的行时,先输出该行,然后关闭输出开关,禁用输出。

这样所有输出的行就是 x,y 的范围,它可能是一个不连续集合。

下面给出一个栗子结束本文:

input.txt

grweag open
hgfds open
gfdsg
geahg close
feaws
grsa close
gfdsg
fdsa open
fdsa
gadfa close
fdsag close
fewag
gerwaef open
gewsa
gewag
gdfsa

执行

$ cat -n input.txt | sed -n '/open/,/close/p'
1 grweag open
2 hgfds open
3 gfdsg
4 geahg close
8 fdsa open
9 fdsa
10 gadfa close
13 gerwaef open
14 gewsa
15 gewag
16 gdfsa

显示的都是自 open 后 到 close 的行,close 后则不显示,直到重新 open;open 后如果没有 close 则其后所有行都在范围内。如此我们可以推测如果 y 如果没有匹配任何一行,则最终的范围应该是 x 中最前面一行到文本的最后一行。

sed 命令多行到多行的定位方式的更多相关文章

  1. linux shell 用sed命令在文本的行尾或行首添加字符

    转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...

  2. Linux shell sed命令在文件行首行尾添加字符

    昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.f ...

  3. linux sed命令(擅长输出行)(转)

    linux命令总结sed命令详解 Sed 简介 sed 是一种新型的,非交互式的编辑器.它能执行与编辑器 vi 和 ex 相同的编辑任务.sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编 ...

  4. sed命令给文本文件的每行的行首或者行尾添加文字

    在每行的头添加字符,比如"HEAD",命令如下: sed 's/^/HEAD&/g' test.file 在每行的行尾添加字符,比如“TAIL”,命令如下: sed 's/ ...

  5. sed命令入门

    什么是sed sed是一种流处理编辑器,可以分割.查找.替换文本. sed命令的处理流程:行处理 Created with Raphaël 2.1.0在shell中执行sed文本或管道输入读入到模式空 ...

  6. sed命令的基本使用方法

    sed命令 stream editor,用程序的方式编辑文本.基本上是玩正则模式匹配. 用s命令替换 $ sed "s/my/Hao Chen's/g" pets.txt 单引号去 ...

  7. 掌握Sed命令

    带书签PDF版,喜欢的话,欢迎多提意见和建议,你的支持是血蝙蝠最大的前进动力! http://download.csdn.net/detail/challenge_c_plusplus/6480007 ...

  8. 『忘了再学』Shell基础 — 30、sed命令的使用

    目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...

  9. sed 命令使用入门

    上一篇说了 awk 命令的基本使用方法,这一篇就来说说其兄弟 sed 的使用方法吧(传说之中,Linux 命令行下处理文件文件三大上古神器:grep.awk.sed,每一个都很好很强大,有时间了说说 ...

随机推荐

  1. 解决eclipse maven工程中src/main/resources目录下创建的文件夹所显示样式不是文件夹,而是"包"图标样式的问题

    参考:http://blog.csdn.net/luwei42768/article/details/72268246 eclipse项目中创建maven项目后,有时在执行命令maven update ...

  2. Java NIO 之 Buffer

    Java NIO 之 Buffer Java NIO (Non Blocking IO 或者 New IO)是一种非阻塞IO的实现.NIO通过Channel.Buffer.Selector几个组件的协 ...

  3. Java并发系列[3]----AbstractQueuedSynchronizer源码分析之共享模式

    通过上一篇的分析,我们知道了独占模式获取锁有三种方式,分别是不响应线程中断获取,响应线程中断获取,设置超时时间获取.在共享模式下获取锁的方式也是这三种,而且基本上都是大同小异,我们搞清楚了一种就能很快 ...

  4. 企业级Docker私有仓库之Harbor部署(http)

    部署环境 Centos7.3 x64 docker-ce-17.06.0 docker-compose-1.15.0 Python-2.7.5(系统默认) Docker及Docker-compose安 ...

  5. 关于define和const

    1.通过define定义的常量,在C语言里面一般叫宏定义.define的本质是简单的文本替换. 2.const定义一个变量,但是这个变量的值只能在定义的时候赋予,之后就不能被更改了. 如果变量声明中带 ...

  6. aop难点解析。

    静态织入和动态织入的区别? 需求示例:假设有一个包,一个包当中有一个方法,我们想在这个方法的前后,加上环绕. 那么怎么加呢? 把知道的都说一遍. 1.建立JsonService 2.建立JSONASP ...

  7. java签名与验签

    基本概念: 加密解密 加密:发送方利用接收方的公钥对要发送的明文进行加密. 解密:接收方利用自己的私钥进行解密. 公钥和私钥配对的,用公钥加密的文件,只有对应的私钥才能解密.当然也可以反过来,用私钥加 ...

  8. 洛谷 [P1314] 聪明的质检员(NOIP2011 D2T2)

    ###一道二分答案加前缀和### 题目中已经暗示的很明显了 "尽可能靠近" " 最小值" 本题的主要坑点在于 long long 的使用 ##abs函数不支持l ...

  9. LeetCode - 540. Single Element in a Sorted Array

    Given a sorted array consisting of only integers where every element appears twice except for one el ...

  10. 试着把.net的GC讲清楚(1)

    什么是GC? GC(garbage collection)是对内存管理中回收已经不用的内存的一种机制,我们熟知的java和.net都有自己的GC机制,是内存管理的一部分. 为什么会有GC呢?是因为动态 ...