sed 命令多行到多行的定位方式
本文提要:
- 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 命令多行到多行的定位方式的更多相关文章
- linux shell 用sed命令在文本的行尾或行首添加字符
转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...
- Linux shell sed命令在文件行首行尾添加字符
昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.f ...
- linux sed命令(擅长输出行)(转)
linux命令总结sed命令详解 Sed 简介 sed 是一种新型的,非交互式的编辑器.它能执行与编辑器 vi 和 ex 相同的编辑任务.sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编 ...
- sed命令给文本文件的每行的行首或者行尾添加文字
在每行的头添加字符,比如"HEAD",命令如下: sed 's/^/HEAD&/g' test.file 在每行的行尾添加字符,比如“TAIL”,命令如下: sed 's/ ...
- sed命令入门
什么是sed sed是一种流处理编辑器,可以分割.查找.替换文本. sed命令的处理流程:行处理 Created with Raphaël 2.1.0在shell中执行sed文本或管道输入读入到模式空 ...
- sed命令的基本使用方法
sed命令 stream editor,用程序的方式编辑文本.基本上是玩正则模式匹配. 用s命令替换 $ sed "s/my/Hao Chen's/g" pets.txt 单引号去 ...
- 掌握Sed命令
带书签PDF版,喜欢的话,欢迎多提意见和建议,你的支持是血蝙蝠最大的前进动力! http://download.csdn.net/detail/challenge_c_plusplus/6480007 ...
- 『忘了再学』Shell基础 — 30、sed命令的使用
目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...
- sed 命令使用入门
上一篇说了 awk 命令的基本使用方法,这一篇就来说说其兄弟 sed 的使用方法吧(传说之中,Linux 命令行下处理文件文件三大上古神器:grep.awk.sed,每一个都很好很强大,有时间了说说 ...
随机推荐
- Linux指令--rcp,scp
rcp代表"remote file copy"(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝:第二种格式用于把文件或目录拷贝 ...
- linkin大话面向对象--继承
[修饰符] class SubClass extends SuperClass 按照这种关系,我们把SuperClass类称为父类或基类,把SubClass称为子类或派生类或拓展类.extend ...
- Hibernate的五个主要接口
Hibernate作为持久成中间件,它的具体实现对与上层调用是透明的,即上层通过接口来调用Hibernate的具体实现,所以对于入门级别的讨论来说,自然应该先从接口开始了.
- Struts2是什么?
Struts2是什么: Struts2是整合了struts1和webwork的技术优点的使用广泛的MVC框架: Struts2的特点: 1.基于MVC框架,结构清晰,便于开发人员掌控开发流程: 2.使 ...
- 主备(keepalived+nginx)
实验环境 系统: centos 6.9 mini 机器名 ip 虚拟ip kn1 192.168.126.10 kn2 ...
- math对象与数组对象
1.math对象 属性 //PI 圆周率 方法 //random 随机数 var num= Math.random(); 生成0到1的随机数//round 四舍五入var num2 ...
- svn一整套使用,从下载到整个服务器搭建完成的详细说明
SVN服务器的本地搭建和使用 Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...
- left join on/right join on/inner join on/full join on连接
现在有两张表,第一张表是用户表,第二张表是订单表.情况是这样的,在我这张用户表里用户很多,但是真正下单的人却不多,而且,每一个用户可以有多个订单.然后领导喊话了,小王,你给我查下,现在咱们的订单有多少 ...
- 前端-css
页面css排版不错乱: 1.最外层div中 定义width=980px,当页面缩小以后,就在下面出现滚动条 2.使用 media 技术,bootstrp技术.页面自使用 一.css选择器 选择器 样式 ...
- 对把JDK源码的一些注解,笔记
//对treeMap的红黑树理解注解. 2017.02.16 by 何锦彬 JDK,1.7.51 /** From CLR */ private void fixAfterInsertion(Entr ...